Używaj czasowników z funkcjami, rzeczowników z klasami - a co z interfejsami? [Zamknięte]

23

Ok, rozumiem normalne konwencje używania czasowników z funkcjami i rzeczowników z klasami. Co z interfejsami? Czy istnieje jakaś metodologia przy wymyślaniu nazw interfejsów, które mogą nie być tak oczywiste?

Żeby było jasne, nie mówię o tym, czy umieścić „ja” przed nazwą, czy też użyć camelCase lub PascalCase. Zastanawiam się nad metodą znalezienia przejrzystej, semantycznej nazwy interfejsu.

EDYCJA Mam obsesję na punkcie nazewnictwa interfejsu w najczystszy sposób. Myślę, że to też musi być rzeczownik, ponieważ kiedy myślę o nazwach klas, myślę o najbliższym „świecie rzeczywistym”, do którego może się odnosić. Przypuszczam, że interfejsy w świecie rzeczywistym to takie rzeczy, jak klawiatura, mysz, pilot zdalnego sterowania, ekran bankomatu. To są wszystkie rzeczowniki. W każdym razie doceniono by każdy dodatkowy wgląd w dobry sposób formułowania nazw interfejsów.

programista
źródło
2
Hm .. Na podstawie tytułu myślałem, że chodzi o zrównanie części mowy między programowaniem a angielskim. W takim przypadku madlibs wydają się możliwe.
Izkata
Pamiętaj, że po utworzeniu klasy, jesteś również stworzenie interfejsu dla obiektów instancji o tej klasie ... Albo inaczej mówiąc, zajęcia są zrealizowane interfejsów. Dlatego powinni używać tej samej konwencji nazewnictwa.
Daniel T.
Ponadto IMHO „używanie czasowników z funkcjami” jest zbyt ogólne. Powinieneś używać czasowników z poleceniami, a rzeczowników z zapytaniami .
Daniel T.

Odpowiedzi:

21

Powiedziałbym, że to zależy od tego, co definiuje interfejs. W niektórych przypadkach, gdy interfejs jest raczej konkretny i szczegółowy, myślę, że rzeczownik jest najlepszy. Przykładami są IList, ICollection.

Czasami jednak interfejs polega bardziej na dodawaniu pewnych ogólnych funkcji do klasy. W takim przypadku myślę, że przymiotnik jest najlepszy. Przykładami są IDisposable, IEnumerable...

Być może innym sposobem na zastanowienie się nad tym jest to, ile „umiejętności” określa twój interfejs.

Na przykład IList<T>interfejs definiuje te umiejętności: Dodaj, Wyczyść, Zawiera, Wstaw, Usuń, ... Są to wszystkie właściwości listy, więc IListjest to dobra nazwa.

IDisposablez drugiej strony określa tylko jedną umiejętność: Dispose. Nadaje się więc do wszystkiego, co jest jednorazowe. Stąd nazwa IDisposable.

Kristof Claes
źródło
10
Sugerowałbym użycie przymiotnika „_able”, jeśli twój interfejs nazwano by po rzeczach, które można zrobić z twoim obiektem (np. IEnumerable), Rzeczownik „_er”, jeśli twój interfejs nazwany byłby po rzeczy, które twój obiekt robi innym obiektom ( np. IEqualityComparer) i rzeczownik ogólny, jeśli nazwa twojego interfejsu pochodzi od rodzaju rzeczy, których zachowanie naśladuje (np IList<T>.).
supercat,
Komentarz @supercat powinien naprawdę zostać uwzględniony w tej odpowiedzi. To ma sens.
Nikhil Vartak
W rzeczywistości przedrostek nazwy interfejsu Ijest zbędny.
user1870400
5

Interfejs opisuje zachowanie więc nazwy powinien tak powiedzieć. Nie jestem pewien co do reguły, ale poznasz nazwę, gdy ją usłyszysz.

Kilka przykładów:

Flyable      - Can Fly
Workable     - Can work
Negotiatable - Can negotiate.

Myślę, że to nie jest właściwe, aby wymienić z interfejsów Ii zadzwonić Setz ISetbo, jako deweloper, nie należy się martwić, czy jest to interfejs lub klasy. Widzę, że ta praktyka nie istnieje teraz w Javie.

ManuPK
źródło
+1 za „jako programista nie powinieneś się martwić, czy to interfejs czy klasa”.
Kazark,
„jako programista nie powinieneś się martwić, czy jest to interfejs czy klasa” - nie zgadzam się, ponieważ jeśli jest to interfejs, musisz wiedzieć, którzy członkowie powinni wdrożyć.
Maximus Minimus
@MaximusMinimus poprzedzający go Ijest redundantny niezależnie. Dlaczego więc nie poprzedzić klas abstrakcyjnych A, regularnych klas Citp?
user1870400
@ user1870400 - prawda, ale nie jest to część, z którą się nie zgadzam.
Maximus Minimus
4

Ponieważ interfejs jest tak naprawdę wyrażeniem typu „co”, ale nie „jak”, nazwałbym je w ten sam sposób, w jaki wymieniasz klasy, przynajmniej z części mowy. Jedyne, co mogę do tego dodać, to to, że często będą one bardziej ogólne niż konkretne implementatory (np. Interfejs „Klient” może mieć implementatory „ProspectiveCustomer” i „PayingCustomer”).

Erik Dietrich
źródło
0

Interfejs jest używany jak klasa. Dlatego też należy nazywać go również rzeczownikiem, gdy nazywa się klasę rzeczownikiem. Preferuj rzeczowniki abstrakcyjne, na przykład „Pojazd”, gdy klasami są „Samochód” i „Ciężarówka”.

Thiton
źródło
0

Szybka odpowiedź: Interfejs polega bardziej na dodawaniu ZESTAWU umiejętności, funkcji, wspólnych granic lub połączeń między jednostkami, klasami, modelami, koncepcjami itp.

Chodzi o dodanie wspólnego zachowania do klas i encji, a następnie pojawi się dobra znacząca nazwa, aby zidentyfikować zestaw przestawionych cech.

Nazewnictwo interfejsów: IStateMachineBuilder, IUserContextProviderBuilder, IEntityBuilderBuilder, IActiveAware, etc.prawdopodobnie wyjaśnij pojęcie.

EL Yusubov
źródło
1
Tak, interfejsy reprezentują umowy lub możliwości; tyle jest dobrze znane. Ale jak to odpowiada na pytanie, jak je nazwać? W tym względzie mówisz tylko: „Pomyśl o tym, a natchnienie cię uderzy”. Nie daje to żadnej rekomendacji, na przykład, która z następujących nazw powinna być wybrana, a dlaczego: IStateMachineBuilder(rzeczownik), IBuildStateMachine(nazwany po akcji), ICanBuildStateMachine(nazwany od zdolności) itp.
stakx
0

Zależy, jeśli interfejs zawiera tylko metody, dobrze byłoby nazwać go za pomocą czasowników takich jak „Akcje”, gdzie tak jakby reprezentował klasę ogólną zawierającą statyczne, końcowe pola, możemy użyć rzeczownika rodzajowego, takiego jak „Pojazd”

Joms Antony
źródło