2012-12-03 16 views
9

Sprawdziłem kilka artykułów msdn, które dotyczą konwencji kodowania C# i wytycznych dotyczących nazewnictwa (C# Coding Conventions i Naming Guidelines), a także similar question na przepełnienie stosu z kilku miesięcy wstecz.Konwencja nazewnictwa C# dla zmiennych o tych samych danych, ale różnych typów

Nie jestem pewien, jak obsługiwać dwie zmienne, które są w tym samym czasie, które posiadają [koncepcyjnie] te same dane w różnych typach.

Przykładem, który pomógłby zilustrować problem, byłby identyfikator, który początkowo jest przechowywany jako ciąg znaków, ale następnie jest przesyłany/parsowany do liczby całkowitej.

Wymyśliłem 3 możliwe kierunki działań i jestem pewien, że opuściłem prawdopodobne opcje.

COA # 1:

int iRecordId; 
string sRecordId; 

Jeżeli jeden lub oba zmienne prefiks skrót typu. Narusza to wytyczne kodowania MS stwierdzające, że nazwy prefiksów nie powinny być poprzedzane węgierską notacją typu.

COA # 2:

int recordId; 
string recordIdString; 

Jeżeli jeden lub oba zmienne wyraźnie określać typ w nazwie. Wydaje się to po prostu niezręczne i chociaż nie korzysta z węgierskiej notacji, wydaje się, że narusza on ducha poprzedniego COA.

COA # 3:

int recordIdForDatabase; 
string recordIdFromUrl; 

Gdzie każda zmienna jest dodatkowo przez wykwalifikowany gdzie dane pochodzą, czy będzie.

Wniosek

Moja myśl jest, że ostatecznie chcą odróżnić dwóch zmiennych, które różnią się tylko według typu, więc gdy istnieją wytyczne, które wyraźnie stwierdzają, aby nie prefiks zmiennych z informacjami typu, jestem pochylony w kierunku za pomocą węgierskiego prefiksu. Ponieważ w pozostałej części kodu jest to całkowicie sprzeczne z konwencjami nazewnictwa, wydaje się, że podkreśli to okoliczność łagodzącą. Czy to rozsądne podejście?

Pytania, komentarze i okrzyki oburzenia są mile widziane.

Odpowiedz

6

Pierwsza opcja jest przestarzała, ponieważ nie używamy już notacji Hunharian.

Druga opcja nie jest zła i widziałem ją w różnych projektach.

Ale ostatnia opcja jest lepsza z mojego punktu widzenia, ponieważ pokazuje różnicę semantyczną między dwiema zmiennymi, a nie różnicami w typach.

2

Po co przechowywać dane dwukrotnie? Czy mógłbyś wstawić identyfikator rekordu do int, a następnie wywołać ToString(), kiedy chcesz go przekształcić?

Przechowując dane tylko raz, pozostawiasz mniej podatności na błędy w kodzie.

Jeśli zmienne przechowują różne wartości, należy je nazwać logicznie. E.g,

int socialSecurityID; 
string driversLicenceID; 
+1

Tak, po prostu ponownie przeczytałem to, co napisałem. Wciąż powinno się trzymać true - tylko przechowywać int _or_ string, a nie oba. Następnie przekształć w razie potrzeby. Zachowałbym wartość int, ponieważ ToString() jest _rarely_ zawiedzie, ale Int32.Parse() może łatwo zawieść. –

2

Jest całkowicie OK. mieć coś takiego w zakresie private:

int recordId; 
string recordIdString; 

Ale jeśli te identyfikatory są częścią interfejsu, należy rozważyć inną konstrukcję klasy. Przeniesienie identyfikatora URL do klasy reprezentującej adres URL może w większości przypadków doprowadzić do lepszej architektury.

Powiązane problemy