Nazewnictwo klas abstrakcyjnych Java

9

Przykład:

Tworzysz abstrakcyjną klasę dla akcji Ajax. Różne akcje Ajax będą rozszerzać tę klasę.

Problem:

  1. Czy nazywasz klasę AjaxAction czy AbstractAjaxAction?
  2. Kiedy tworzysz podklasy, nazywasz je:
    • Akcja
    • AjaxAction
    • Po prostu nazwij ich takimi, jakimi są

Nie udało mi się ustalić, czym jest „oficjalna” konwencja. Nie widzę potrzeby stosowania przedrostka „Streszczenie” ani żadnej wymaganej konwencji nazewnictwa w podklasach. (W każdym razie może pasować.)

Czy istnieje oficjalna konwencja? Czy możesz połączyć mnie z tym? A jakie są twoje opinie na ten temat?

Michael K.
źródło

Odpowiedzi:

16

Jeśli to możliwe, staram się pozostawiać szczegóły implementacji poza nazwami, w tym przedrostek / sufiks dla klasy abstrakcyjnej lub interfejsu.

Jednym z miejsc, w których można znaleźć wskazówki / inspiracje dotyczące nazewnictwa, jest interfejs API języka Java. Nie mogę wymyślić żadnych części, które używają prefiksu (z ogromnym wyjątkiem jest interfejs API kolekcji, który intensywnie używa prefiksu Abstrakcja). Poniższe wyszukiwanie da kilka całkiem dobrych przykładów:

„publiczna klasa abstrakcyjna” na download.oracle.com/javase/6

Przekonasz się, że klasy abstrakcyjne nazywane są czymś abstrakcyjnym, a konkretne podklasy nazywane są czymś bardziej konkretnym. Na przykład, klasa abstrakcyjna Readerma konkretne podklasy BufferedReader, StringReader, InputStreamReader, itd.

Ponieważ twoje konkretne podklasy są po prostu bardziej szczegółowymi wersjami twojej abstrakcyjnej klasy, intencją jest, abyś wybrał swoje imiona w ten sam sposób. W twoim przykładzie nazwałbym klasę abstrakcyjną AjaxActioni użyłem jej w nazwach konkretnych podklas ( SpecificAjaxAction).

Tyler Holien
źródło
12

Wybierz coś i bądź konsekwentny. Bez względu na to, czy używasz przyrostka, Baseaby wskazać zamierzoną klasę podstawową, czy przedrostek Abstract, zachowaj spójność.

Jest tyle opinii na temat tego rodzaju rzeczy, co, no cóż, programiści. Moim zdaniem, dla tego, co jest warte, ponieważ konsekwencja w nazewnictwie w ramach projektu (lub grupy programistycznej itp.) Jest ważniejsza niż jakikolwiek konkretny schemat nazewnictwa.

Brian Clapper
źródło
4

AjaxActionBaseNazwałbym klasę abstrakcyjną i klasę potomną sufiksem „Action” lub „AjaxAction”, w zależności od tego, które z tych działań były bardziej czytelne dla działań, które musiałem stworzyć.

Adam Lear
źródło
0

Wolę podpowiedzieć, że klasa jest abstrakcyjna w nazwie z jednego prostego, ale bardzo ważnego powodu:

  • Lepiej jest budować interfejsy API wokół interfejsów niż klas abstrakcyjnych.
  • Chcesz użyć prostej nazwy, np. „Akcja”, aby nazwać swój interfejs. Zobacz na przykład List lub Map w API Java Collections API - wszystkie są interfejsami.

Dlatego zwykle nazwałbym klasę abstrakcyjną najwyższego poziomu albo AbstractAction lub BaseAction. O ile nie jest to bardzo specyficzna potrzeba, zwykle nie upubliczniłem ich, aby użytkownicy kodu kierowali się korzystaniem z interfejsu. Abstrakcyjne klasy podstawowe powinny zwykle być szczegółem implementacji, a nie cechą interfejsu API, chyba że jesteś bardzo bardzo ostrożny w kwestii tego, jak chcesz, aby ludzie je rozszerzali.

mikera
źródło