Istnieje kilka nazw, w przypadku których sięgasz po te nazwy, wiesz, że już coś pomieszałeś.
Na przykład:
XxxManager
Jest to złe, ponieważ klasa powinna opisywać, co robi klasa. Jeśli najbardziej konkretnym słowem, jakie można wymyślić dla tego, co robi klasa, jest „zarządzać”, to klasa jest zbyt duża.
Jakie inne anty-wzorce nazewnictwa istnieją?
Aby wyjaśnić, nie pytam „jakie imiona są złe” - to pytanie jest całkowicie subiektywne i nie ma sposobu, aby na nie odpowiedzieć. Pytam: „jakie nazwy wskazują na ogólne problemy projektowe z systemem”. Oznacza to, że jeśli chcesz wywołać komponent Xyz, prawdopodobnie oznacza to, że komponent jest źle odbierany. Zauważ też, że istnieją wyjątki od każdej reguły - szukam tylko flag ostrzegawczych, kiedy naprawdę muszę się zatrzymać i przemyśleć projekt.
źródło
Odpowiedzi:
Następujące anty-wzorce nazewnictwa są powiązane z .NET, a zwłaszcza C #:
cxtCtrlMngr
. Trudno zgadnąć, co to ma oznaczać.ILoginAttemptRepository
jest w porządku i opisowy -ILoginAttemptRepositoryUsingEntityFrameworkForObjectRelationalMapping
jest opisowy, ale zdecydowanie nie jest w porządku.źródło
I
ma to oznaczaćinterface
tutajimplementer
, czy w pierwszej osobie liczby pojedynczej? Ponieważ większość klas implementuje interfejs, zbyt wiele klas / interafesów rozpoczynających się od kapitałuI
jest nieprzyjemne i utrudnia czytelność, a sam kod śmierdzi.Jednym z nich, na które często się natknęłam, jest po prostu brak jakiegokolwiek wzorca nazewnictwa. Zazwyczaj wskazuje to na ignorancję programisty (że wzorce nazewnictwa są dobrą rzeczą ), a także ten anty-wzorzec ma tendencję do rażącego naruszania SRP poprzez upychanie wszelkiego rodzaju metod związanych z klasą w samą klasę, na przykład klienta klasa ma właściwości, metody CRUD, wszystko zdalnie związane z klientem, czego potrzebuje część aplikacji.
Dodam też, że użycie „Engine” jako sufiksu jest mniej więcej tym samym, co użycie „Managera”. Jest to bardzo niejasne, a klasa o nazwie jest
XxxEngine
zwykle modułem w stylu VB zawierającym wiele metod, więc jest w jednym „łatwym w użyciu” miejscu, bez wiedzy ani pojęcia programowania obiektowego.źródło
Cóż, najpierw proste odpowiedzi: wpisz węgierski ( http://mindprod.com/jgloss/unmainnaming.html , ma też inne świetne pomysły. Bardziej zrównoważony pogląd na to, kiedy węgierski nie jest zły, http://www.joelonsoftware.com /articles/Wrong.html )
źródło
Prefiks „I” w nazwie interfejsu lub „Abstract” w nazwie klasy abstrakcyjnej. Może to być usprawiedliwione w językach, które nie mają pojęcia klas abstrakcyjnych lub które nie rozróżniają interfejsów i klas abstrakcyjnych - ale na przykład w Javie jest to zawsze zły pomysł.
Nie zgadzam się również z tobą w kwestii menedżera. Czasami używam tego wzorca i oznacza to po prostu, że gdybym spróbował nazwać go czymś innym, nazwa nie byłaby bardziej opisowa niż XxxxxManager. Istnieją pewne zadania (niekoniecznie złożone), których po prostu nie można streścić w jednym lub dwóch słowach.
źródło
XxxxManager
to najgorsze z możliwych nazw, jakie może mieć klasa. Oczywiście, że coś zarządza! Właśnie dlatego został napisany.Manager
jest bezsensownym słowem wypełniającym, które nie wnosi żadnej wartości do zrozumienia - z nazwy - za co odpowiada klasa.TabManager
? Masz lepszą nazwę dla klasy sterującej mechanizmem karty JSP? Lub wstrzymuj sięTabController
... Jeśli chodzi o prefiksAbstract
, czuję, że jest nadużywany, ale często jest poprawny (zobacz biblioteki Java dla przykładów). Myślę, że mogę spokojnie powiedzieć, że nigdy nie widziałemI
interfejsów w żadnym miejscu, w którym ktoś nie próbował programować na interfejsie, który nie powinien tam być. Podobnie, tylko jedna klasa implementuje interfejs.IXxx
czy nieXxxImpl
.Mowa:
Mam chudą niepełnosprawność i nie mogę przeliterować. Bez sprawdzania pisowni jestem bezsilny. Próbuję skopiować wszystkie utworzone przeze mnie nazwy do edytora tekstu w celu weryfikacji, ale zawsze brakuje mi niektórych. Podczas mojego ostatniego projektu napisałem dużą część interfejsu API i wydaje mi się, że nie sprawdziłem pisowni za pierwszym razem, gdy użyłem słowa „odpowiedz” i założyłem, że to prawda, ponieważ nikt mi nie powiedział. Mieliśmy co najmniej 50 funkcji z odpowiedzią. W zespole pojawiła się nowa osoba i zapytała, dlaczego używamy odpowiedzi. Czułam się naprawdę głupia.
źródło
affect
(zamiast efektu). Doprowadziło mnie to do szaleństwa i szybko znalazłem inną wtyczkę, aby zrobić to samo.Obawiam się, że moje opinie są nieco kontrowersyjne. Ale spróbujmy ...
Jeśli o mnie chodzi, muszę zgodzić się z Mikiem Baranczakiem, nazwy takie jak XxxController, XxxHandler to coś, czego naprawdę często używamy. Dla nas Kontroler jest czymś w rodzaju punktu wejścia dla czegoś „enkapsolowanego”, np. Zarządzania transakcjami, radzenia sobie z nieoczekiwanymi błędami, dzwonienia do XxxHandler w celu wykonania rzeczywistej pracy. Powiedziałbym, że XxxManager jest synonimem kontrolera. Myślę, że ważne jest, aby nie używać Menedżera w jednym przypadku, a Kontrolera w innym. Bycie konsekwentnym jest bardzo ważne, jeśli pracujesz w zespole.
Znalezienie lepszych nazw dla takich rzeczy byłoby naprawdę trudne, a może nawet niemożliwe. Xxx powinien być dobrze wybrany, aby sytuacja była bardziej przejrzysta.
Osobiście nie lubię, gdy metoda o nazwie get ... lub set ... jest czymś więcej niż zwykłym akcesorium. Lubię det ... na determinację.
Inna rzecz, która przychodzi mi na myśl: według wuja Boba. „I” w nazwie metody jest oznaką robienia zbyt wiele. Ale życie nie zawsze jest tylko czarno-białe - są sytuacje, w których myślę, że jest w porządku - np. z powodu problemów z wydajnością (gdy masz już dane, aby sprawdzić, dlaczego ich nie przetworzyć) ...
Osobiście jestem także wielkim fanem węgierskiej notacji systemowej - przez większość czasu masz do czynienia z kodem źródłowym w IDE ok. Ale często używasz tylko edytora lub przeglądasz repozytorium w przeglądarce. Wadą może być obsługa narzędzi z powodu prefiksów typów ...
Myślę, że najważniejszą rzeczą jest być konsekwentnym - konwencja nieoptymalna - dla mnie - jest lepsza niż brak konwencji ...
źródło
Być może najgorszym anty-wzorem nazewnictwa jest ten:
Mamy trzyelementową listę par [foo, bar]. Jeśli potrzebujemy czwartego, będziemy musieli dodać nowe kolumny do tabeli.
Prowadzi do kodu w ten sposób:
Oddzielna tabela powinna zostać utworzona z kolumnami foo i bar i połączona z tabelą rzeczy:
Drugie najgorsze to:
Tutaj mamy sześć pól zamiast dwóch instancji klasy Address.
Ten anty-wzór jest oznaczony serią dwuczęściowych nazw zawierających każdą kombinację dwóch zestawów, np. [Foo, bar] x [1,2,3] lub [home, perm] x [ulica, miasto, stan]
źródło
==
nazywających antypattern? Jestem zmieszany.Wszelkie nazewnictwo klas lub interfejsów, które jest tautologią, jest złe, nie tylko w Javie, o której mówi łącze, ale w dowolnym języku.
źródło
Często spotykam biblioteki oprogramowania o nazwach ogólnych, takich jak
Library
lubCommon
. Wskazują na nieoptymalny projekt: programiści starają się unikać duplikacji kodu, ale bez żadnej próby stworzenia projektu rozłożonego na podstawie funkcjonalności.źródło
Od Microsoft w sprawie nazewnictwa, mogę podać tę listę dla złych nazw:
źródło