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.
źródło
Odpowiedzi:
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ęcIList
jest to dobra nazwa.IDisposable
z drugiej strony określa tylko jedną umiejętność: Dispose. Nadaje się więc do wszystkiego, co jest jednorazowe. Stąd nazwaIDisposable
.źródło
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 (npIList<T>
.).I
jest zbędny.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:
Myślę, że to nie jest właściwe, aby wymienić z interfejsów
I
i zadzwonićSet
zISet
bo, jako deweloper, nie należy się martwić, czy jest to interfejs lub klasy. Widzę, że ta praktyka nie istnieje teraz w Javie.źródło
I
jest redundantny niezależnie. Dlaczego więc nie poprzedzić klas abstrakcyjnychA
, regularnych klasC
itp?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”).
źródło
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”.
źródło
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.źródło
IStateMachineBuilder
(rzeczownik),IBuildStateMachine
(nazwany po akcji),ICanBuildStateMachine
(nazwany od zdolności) itp.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”
źródło