Ja i mój zespół R&D utrzymujemy dużą bazę kodów. Podzieliliśmy naszą logikę biznesową na wiele pakietów. niektóre z nich mają klasy o identycznych nazwach .
Jak można się domyślić, nazwy są sprzeczne, gdy obie klasy są przywoływane w tym samym pliku Java.
Na przykład:
com.myapp.model (package)
- Device (class)
- ...
com.myapp.data (package)
- Device (class)
- ...
Przeprowadziliśmy debatę na temat najlepszych praktyk w leczeniu tych przypadków i pojawiły się następujące opcje:
1. opcja
Zmiana nazwy klasy, dodanie przedrostka
ModelDevice DataDevice
2. opcja
Używanie pełnego pakietu + nazwy klasy, gdy oba są przywoływane
com.myapp.model.Device com.myapp.data.Device
Co jest bardziej poprawnego pod względem zarządzania kodem i skalowalności?
obecnie łączymy oba podejścia i zaczynamy mieć niespójność
java
coding-style
coding-standards
naming
conventions
Jossef Harush
źródło
źródło
java.util.Date
ijava.sql.Date
- zwłaszcza, żejava.sql.Date
jest podklasąjava.util.Date
i tak ładnie wymyka się z warstw danych (i nie ładnie serializuje JSON).Odpowiedzi:
Użyj nazwy pakietu. Ten typ problemu jest właśnie powodem, dla którego Java korzysta z konwencji nazewnictwa pakietów, którą robi. Zapobiega tego rodzaju problemom, niezależnie od tego, czy są to dwa zespoły w tej samej firmie, czy dwa zespoły po przeciwnych stronach ziemi.
źródło
Na razie masz jedną klasę ModelDevice (urządzenie w pakiecie modelu). Co zrobić, jeśli masz inny taki ModelDevice dla innej klasyfikacji? Problem może nadal występować, a koszty ogólne również będą rosły.
Chociaż na chwilę obecną może się okazać, że zmiana nazwy klas może być dobrą pomocą, na dłuższą metę sugerowana alternatywa polega na prefiksie nazw pakietów, co jest standardem branżowym.
źródło
Wystarczy dodać jeden aspekt, o którym jeszcze nie wspomniano:
Przyjrzyj się wzorcom użytkowania, tj. Źródłom Java, które odwołują się do jednej lub obu klas.
IMHO w większości przypadków pliki źródłowe powinny odwoływać się tylko do jednej ze sprzecznych klas, a z kontekstu powinno być jasne, czy dotyczą one modelu, czy świata danych. Jeśli jest to trudne z jakiegokolwiek powodu, zmieniam nazwy klas, ponieważ generalnie nie lubię nazw klas z prefiksem pakietu w kodzie źródłowym (pogarsza to czytelność).
Jeśli masz pliki źródłowe, które dotyczą obu światów, mogą one łączyć klasy z odpowiedzialnością za tłumaczenie między dwoma różnymi widokami świata, a tutaj wolałbym znaleźć nazwy klas z prefiksem.
Ale zobaczenie obu klas urządzeń w jednym źródle może być również wskazówką, że źródło narusza zasadę pojedynczej odpowiedzialności poprzez mieszanie zadań z modelu i świata danych.
źródło