2009-05-05 17 views
83

Jakie jest zalecane podejście do nazywania klas bazowych? Czy jest to przedrostek nazwy typu z "Podstawa" lub "Streszczenie", czy możemy po prostu przyrostek z "Base"?Konwencja nazewnictwa klas C: Czy jest to klasa BaseClass lub klasa klasy lub Klasa abstrakcyjna

rozważyć następujące:

typ: ViewModel np MainViewModel, ReportViewModel

klasy skład: BaseViewModel lub ViewModelBase lub AbstractViewModel

również następujące:

typ: Product np VirtualProduct, ExpiringProduct

klasa bazowa: BaseProduct lub ProductBase lub AbstractProduct

Co myślisz jest bardziej standard?

class Entity : EntityBase 
{ 
} 

lub

class Entity : BaseEntity 
{ 
} 
+1

Zobacz także [Konwencje nazewnictwa dla klas abstrakcyjnych] (http://stackoverflow.com/a/429494/33499) – wimh

+0

możliwy duplikat [Używanie "Bazy" w nazwie klasy] (http://stackoverflow.com/questions/510839/using-base-in-a-class-name) – nawfal

Odpowiedz

65

W ramce znajdują się przykłady z sufiksem Podstawowy, np. System.Configuration.Provider.ProviderBase, System.Web.SessionState.SessionStateStoreProviderBase.

Jednak nie wszystkie abstrakcyjne klasy bazowe w Ramach są zgodne z tą konwencją (np. System.Data.Common.DbParameter, System.Data.Common.DbCommand).

Osobiście unikam używania przyrostka , chyba że Chciałem podkreślić fakt, że jest to klasa abstrakcyjna i czułem, że inaczej użytkownicy klasy mogą oczekiwać, że nazwa wskaże konkretną implementację.

39

Żaden z powyższych. Zastanów się, jaki cel zapewnia twoja klasa bazowa; nazwij to. Na przykład podstawową klasą samochodów i rowerów może być pojazd.

Jeśli tworzysz klasy bazowe tylko po to, aby mieć klasę bazową jednej klasy i bez żadnego celu ani przyczyny, prawdopodobnie robisz coś złego.

+13

To nie zawsze tak jest, a znajdziesz wiele klas Base * w ramach. CollectionBase, DictionaryBase .... itp. –

+1

Dobrze, że obiekty świata rzeczywistego powinny pasować dokładnie do artefaktów. Abstrakcja dóbr wspólnych powinna być oparta na pojeździe, szczegóły muszą być dokładne, ale też dokładne. – ruslander

+1

A co powiesz na PageBase w aplikacji internetowej? –

2

Używamy BaseEntity, ale myślę, że to twoje własne preferencje. Często widzę tego drugiego.

Po prostu zachowaj spójność w swoim kontekście, czy to w projekcie, w przestrzeni nazw, czy w miarę możliwości w zespole. Różne konwencje są gorsze niż zła konwencja IMHO.

2

Osobiście nie polecam dodawania bazy słów w ogóle. Nigdy nie wiesz, kiedy będziesz musiał zmienić kod i nie będzie to już obiekt podstawowy. Biorąc to pod uwagę, robiliśmy to już w przeszłości, na początku dodaliśmy słowo Base. Wydaje się, że płynie lepiej.

-1

BaseEntity wygląda bardzo podobnie do wielbłąda - strName, bseEntity. Wybrałbym EntityBase, ponieważ najpierw definiuje temat, co pomoże ci szybciej zidentyfikować jego funkcję.

+9

Mówisz o węgierskiej notacji, a nie o wielbłądzie. Węgierska notacja była przypadkiem wielbłądowa, ale są to zupełnie inne rzeczy. – sliderhouserules

4

Jeśli mówimy o klasach wirtualnych bazowych, standard Microsoftu jest ClassnameBase (jak CollectionBase.)

-3

Zawsze myśleć o alphabetizing kiedy wymienić rzeczy. Naprawdę nie lubię patrzeć na serwer SQL i każda procedura przechowywana nazywa się usp [coś]. W tym samym kierunku nie nadużywaj Get and Set jako wiodących nazw funkcji. Zamiast GetItems lub PlaceOrder pomyśl o nazwaniu ich jako ItemsGet lub OrderPlace.

Ogólnie rzecz biorąc, ClassnameBase/EntityBase będzie lepszym wyborem.

+7

Nie zgadzam się; Czytelność. GetItems ma dużo więcej sensu niż ItemsGet. –

+1

Nie zgadzam się ... taki sam powód jak powyżej .. ale nie mogę głosować w dół ... :( – Mugunth

+0

W przeciwieństwie do innych komentarzy marcc NIE zasugerował czegoś takiego jak itemgsGet() Napisał itemy(). –

2

Myślę, że to kwestia wyboru. Powiedziałbym, że jeśli tworzysz wiele klas bazowych, to być może lepiej jest iść z BaseClassname zawsze, ponieważ w ten sposób ZAWSZE możesz dowiedzieć się, jakie klasy bazowe możesz zacząć używać po prostu wpisując Bazę i otrzymując resztę pomocy od Intellisense. Co jeśli masz 20 klas bazowych i dodajesz Base jako sufiks, a zapomniałeś jaka była nazwa klasy bazowej? Czy chcesz najpierw utworzyć diagram klas z VS i dowiedzieć się, jakie klasy bazowe są dostępne? Dobrze jest nazwać je ClassBase, gdy jest to tylko jedna lub dwie klasy.

To samo dotyczy decyzji między GetItems i funkcją ItemsGet. Powiedziałbym ze względu na czytelność - idź na GetItems. Postępuj zgodnie z konwencjami :)

+0

Klasy "Base" są Hack OO, patrz [komentarz Paula] (http://stackoverflow.com/a/826838/162215) Są często pomocni, a czasem niezbędni, ale nadal są hackami. Jeśli czujesz potrzebę szukania wszystkie dostępne klasy bazowe, dlaczego tak jest? Co one udostępniają, co stwarza twoją potrzebę zobaczenia ich wszystkich razem? Odpowiedź może pomóc Ci znaleźć lepsze nazewnictwo. – Iain

+1

@Abhishek: Analogia do 'GetItems' nie działa-" Get "jest tylko czasownikiem, a zatem tylko tworzy angielski gramatyczny sens jako przedrostek, podczas gdy" Base "działa zarówno jako przymiotnik (przedrostek) lub rzeczownik (sufiks) . –

+1

@Iain: Powodem, dla którego ludzie używają "Base" w nazwach klas, nie jest znalezienie wszystkich klas bazowych - uzasadnienie jest bliższe odwrotności. Dzieje się tak dlatego, że klasa bazowa szeregu powiązanych klas wyróżnia się od nich, podobnie jak prefiks "I" ma na celu odróżnienie interfejsu od klas, które go adoptują. Widziałem przedrostek/sufiks "Base" używany najczęściej, gdy klasa podstawowa jest sama w sobie niefunkcjonująca - abstrakcja według zamierzonego użycia, niezależnie od wymuszonego "abstrakcji". –

Powiązane problemy