Dawno temu przeczytałem artykuł (uważam, że wpis na blogu), który umieścił mnie na „właściwej” ścieżce nazywania obiektów: bądź bardzo skrupulatny w nazywaniu rzeczy w swoim programie.
Na przykład, jeśli mój wniosek był (jako typowy aplikacji biznesowych) obsługa użytkowników, firm i adresy będę mieć User
, A Company
i Address
klasy domeny - i prawdopodobnie gdzieś UserManager
, A CompanyManager
i AddressManager
będzie pop-up, który obsługuje te rzeczy.
Więc można powiedzieć, co te UserManager
, CompanyManager
i AddressManager
zrobić? Nie, ponieważ Manager to bardzo ogólny termin, który pasuje do wszystkiego, co możesz zrobić z obiektami domeny.
Artykuł, który przeczytałem, zalecał używanie bardzo specyficznych nazw. Gdyby była to aplikacja C ++, a UserManager
zadaniem jej było przydzielanie i uwalnianie użytkowników ze sterty, nie zarządzałby nimi, ale chroniłby ich narodziny i śmierć. Hmm, może moglibyśmy to nazwać UserShepherd
.
A może UserManager
zadaniem jest sprawdzenie danych każdego obiektu użytkownika i podpisanie danych kryptograficznie. Wtedy mielibyśmy UserRecordsClerk
.
Teraz, gdy ten pomysł utkwił mi w pamięci, staram się go zastosować. I ten prosty pomysł jest niezwykle trudny.
Potrafię opisać, co robią klasy i (o ile nie wpadam w szybkie i brudne kodowanie) klasy, które piszę, robią dokładnie jedną rzecz. To, za czym tęsknię od tego opisu do nazw, to rodzaj katalogu nazw, słownictwo, które odwzorowuje pojęcia na nazwy.
Ostatecznie chciałbym mieć coś w rodzaju katalogu wzorców (często wzorce projektowe łatwo podają nazwy obiektów, np. Fabryka )
- Fabryka - tworzy inne obiekty (nazewnictwo wzięte z wzorca projektowego)
- Pasterz - Pasterz zajmuje się życiem przedmiotów, ich tworzeniem i zamykaniem
- Synchronizer - Kopiuje dane między dwoma lub więcej obiektami (lub hierarchiami obiektów)
Niania - Pomaga obiektom osiągnąć stan „użyteczny” po utworzeniu - na przykład poprzez połączenie z innymi obiektami
itd itd.
Jak sobie z tym poradzisz? Czy masz ustalone słownictwo, wymyślasz nowe nazwy w locie, czy uważasz, że nazywanie rzeczy nie jest tak ważne czy złe?
PS: Interesują mnie również linki do artykułów i blogów omawiających ten problem. Na początek oto oryginalny artykuł, który zmusił mnie do myślenia: Nadawanie nazw klasom Java bez „Managera”
Aktualizacja: Podsumowanie odpowiedzi
Oto krótkie podsumowanie tego, czego nauczyłem się z tego pytania.
- Staraj się nie tworzyć nowych metafor (Niania)
- Zobacz, co robią inne frameworki
Dalsze artykuły / książki na ten temat:
- Jakie imiona regularnie zaliczasz / dołączasz do zajęć?
- Jakie jest najlepsze podejście do nazewnictwa klas?
- Książka: Wzory projektowe: elementy oprogramowania obiektowego wielokrotnego użytku (twarda okładka)
- Książka: Patterns of Enterprise Application Architecture (twarda okładka)
- Książka: Wzory realizacji (książka w miękkiej oprawie)
I aktualna lista prefiksów / sufiksów nazw, które zebrałem (subiektywnie!) Z odpowiedzi:
- Koordynator
- Budowniczy
- Pisarz
- Czytelnik
- Treser
- Pojemnik
- Protokół
- Cel
- Przetwornik
- Kontroler
- Widok
- Fabryka
- Jednostka
- Wiadro
I dobra wskazówka dla drogi:
Nie paraliż nazewnictwa. Tak, nazwiska są bardzo ważne, ale nie są wystarczająco ważne, aby tracić mnóstwo czasu. Jeśli nie potrafisz wymyślić dobrego imienia w 10 minut, idź dalej.