Ich und mein Forschungs- und Entwicklungsteam unterhalten eine große Codebasis. Wir haben unsere Geschäftslogik in mehrere Pakete unterteilt. Einige von ihnen haben Klassen mit identischen Namen .
Wie Sie sich vorstellen können, stehen die Namen in Konflikt, wenn beide Klassen in derselben Java-Datei referenziert werden.
Beispielsweise:
com.myapp.model (package)
- Device (class)
- ...
com.myapp.data (package)
- Device (class)
- ...
Wir hatten eine Debatte darüber, wie diese Fälle am besten behandelt werden können, und es wurden folgende Optionen angeboten:
1. Option
Umbenennen der Klasse durch Hinzufügen eines Präfixes
ModelDevice DataDevice
2. Option
Verwenden des vollständigen Pakets + Klassennamens, wenn auf beide verwiesen wird
com.myapp.model.Device com.myapp.data.Device
Was ist in Bezug auf Codeverwaltung und Skalierbarkeit korrekter?
Wir mischen derzeit beide Ansätze und beginnen, Inkonsistenzen zu haben
java
coding-style
coding-standards
naming
conventions
Jossef Harush
quelle
quelle
java.util.Date
undjava.sql.Date
- zumaljava.sql.Date
es sich um eine Unterklasse von Datenebenen handeltjava.util.Date
und so gut aus diesen herausrutscht (und nicht gut zu JSON serialisiert).Antworten:
Verwenden Sie den Paketnamen. Diese Art von Problem ist genau der Grund, warum Java die Paketbenennungskonvention verwendet, die es tut. Es verhindert diese Art von Problemen, egal ob es sich um zwei Teams in derselben Firma oder um zwei Teams auf gegenüberliegenden Seiten der Erde handelt.
quelle
Ab sofort haben Sie eine ModelDevice-Klasse (Gerät im Modellpaket). Was ist, wenn Sie ein anderes solches ModelDevice für eine andere Klassifizierung haben? Das Problem kann weiterhin bestehen bleiben und die Gemeinkosten werden ebenfalls weiter steigen.
Obwohl Sie vorerst feststellen können, dass das Umbenennen von Klassen eine gute Hilfe ist, wird auf lange Sicht die vorgeschlagene Alternative darin bestehen, den Paketnamen ein Präfix voranzustellen, was dem Industriestandard entspricht.
quelle
Nur um einen Aspekt hinzuzufügen, der noch nicht erwähnt wurde:
Schauen Sie sich die Verwendungsmuster an, dh die Java-Quellen, die auf eine oder beide Klassen verweisen.
IMHO sollten Quelldateien in den meisten Fällen nur auf eine der widersprüchlichen Klassen verweisen, und aus dem Kontext sollte klar sein, ob sie sich mit dem Modell oder der Datenwelt befassen. Wenn dies aus irgendeinem Grund schwierig ist, würde ich die Klassen umbenennen, da ich Klassennamen mit Paketpräfix im Quellcode im Allgemeinen nicht mag (dies beeinträchtigt die Lesbarkeit).
Wenn Sie Quelldateien haben, die sich mit beiden Welten befassen, können diese Klassen mit der Verantwortung verbinden, zwischen zwei verschiedenen Ansichten der Welt zu übersetzen, und hier würde ich es vorziehen, Klassennamen mit Paketpräfix zu finden.
Das Anzeigen beider Geräteklassen in einer Quelle kann jedoch auch ein Hinweis darauf sein, dass die Quelle gegen das Prinzip der Einzelverantwortung verstößt, indem Aufgaben aus dem Modell und der Datenwelt gemischt werden.
quelle