Cześć
mam pytanie odnośnie nazewnictwa klas. Np jak mam klase uzytkownika Entity jak powinienem nazwać UserBean, UserDao czy jakoś inaczej? Kiedy piszemy DAO a kiedy Bean?
Nie bardzo rozumiem pytanie, bo DAO i Bean niewiele maja wspólnego. DAO to obiekt dostarczający interfejs dostępu do persystentych danych (np. od bazy danych) i służy do wyciągania obiektów ze źródła danych. Bean w sensie JavaBeans to po prostu obiekt DTO - struktura na dane. Bean w sensie Springa to generyczny obiekt zarządzany przez Springa.
Nazwa powinna wskazywać co dana klasa robi, np. jeżeli korzystasz z repo które wyszukuje uzytkownika to np. UserFinder.
Jeżeli tworzysz Beana User to tak na prawdę tworzysz obiekt User, który jest wykorzystywany więc po co słowo Bean w nazwie..?
Moim zdaniem nie powinno się w ogóle używać słowa bean, dao ponieważ przemycasz w nazwie dane techniczne.
Polecam książkę czysty kod
Cytat z książki "Czysty kod":
"Nazwy Klas
Klasy i obiekty powinny być rzeczownikami lub wyrażeniami rzeczownikowymi, takimi jak Customer,
WikiPage, Account czy też AddressParser. Należy unikać w nazwach klas słów takich jak Manager,
Processor, Data lub Info. Nazwy klas nie powinny być czasownikami."
co jest bardzo dobre bo:
-
nazwy klas odzwierciedlają prawdziwe rzeczy z danej dziedziny (a nie są wymyślonymi abstrakcjami jak Dao czy szczególami technicznymi jak Bean)
-
jest mniejszy narzut poznawczy jak się to czyta (łatwiej czytać kod, gdzie są proste klasy User czy File niż UserDao, UserSrao, UserKakao, FileBean, FileCoffeeBean, FileRoastedCoffeeBean)
@gg @LukeJL @Zimny Krawiec mam wrażenie że mylicie tutaj dwa różne rodzaje klas.
Jedne to klasy należące do application logic
i do infrastruktury
projektu -> dao, dto, kontrolery itd. I tutaj jak najbardziej ma sens informacja że taki obiekt jest kontrolerem, taki jest DAO a inny jest jeszcze czymś innym. Wymyślanie dla tych obiektów nazw z życia wziętych
to głupi pomysł bo te obiekty NIE MAJĄ odzwierciedlenia w domenie! Takie nazwy będą wyssane z palca i mylące.
Drugie to klasy domenowe, należące do business logic
aplikacji. Tutaj sytuacja jest zupełnie odwrotna - tutaj należy nazywać klasy zgodnie z ich przeznaczeniem domenowym, bo takie nazwy dla nich istnieją, szczególnie jeśli piszemy zgodnie z OOP / DDD.
Jest jeszcze jeden błąd, zwykle stosowany wśród obiektów domenowych - tzw smerfowa konwencja nazewnicza. Smerfy każdy chyba zna - był Smerf Ważniak, Smerf Pracuś, Smerf Laluś, Smerf.... I tak też niektórzy nazywają klasy domenowe - dodając generyczny prefix który nie niesie żadnej informacji. I nagle mamy MarsRoverWhee
, MarsRoverCamera
, MarsRoverEngine
, MarsRoverBatteries
... ;]