W praktyce oznacza to użycie niestandardowego (niezmiennego) w class
stosunku do string
jakiegoś innego rodzaju prymitywnego.
Przykłady:
- Publikowanie: międzynarodowy standardowy numer książki.
- Finanse: międzynarodowy numer identyfikacyjny papierów wartościowych.
Zalety:
- Może zapewnić format identyfikatora.
- Zostaje pierwszorzędnym członkiem modelu.
Niedogodności:
- Dodaje tarcie związane z trwałością (np. Entity Framework).
- Więcej kodów.
Odpowiedzi:
Jeśli możesz dać klasie wystarczająco przydatną funkcję, aby uzasadnić dodatkową złożoność braku bycia ciągiem, zrób to. Podejrzewam, że w przypadku identyfikatorów takich jak ISBN i ISIN tak nie jest.
Aby klasa identyfikatora była przydatna, oczekiwałbym, że będzie wyglądać mniej więcej tak:
Jeśli zamiast tego wygląda to bardziej tak:
Potem porzuciłbym klasę całkowicie, wszędzie używałem regularnych ciągów i upewniłem się, że konsekwentnie używam „isin” we wszystkich odpowiednich nazwach zmiennych.
Zauważ, że w niektórych językach dodanie nowego typu prawie nie ma „dodatkowej złożoności” w typowych programach, w którym to przypadku zachęcamy do utworzenia nowego typu, nawet jeśli w ogóle nie miałby żadnej funkcjonalności. Ale nie jest tak w przypadku większości tradycyjnych języków OOP, takich jak C ++.
źródło
Powiedziałbym: idź po to. Twierdziłbym, że zalety przewyższają wady w tym przypadku. Dodatkowy kod prawdopodobnie będzie dość minimalny, a problem trwałości można łatwo rozwiązać, zapewniając jakiś konwerter między nową klasą a typem, którego oczekuje baza danych (nigdy nie korzystałem z Entity Framework, ale wiem, że jest to stosunkowo bezbolesne w Hibernować).
Jedną z zalet, które można uzyskać, definiując własną klasę, jest to, że kompilator może zagwarantować, że wszelkie metody, które chcą uzyskać numer ISBN lub numer ISIN, będą wiedziały w czasie kompilacji, jeśli spróbujesz przekazać złą wartość. Znacznie trudniej będzie również przypadkowo zastąpić to pole w Twojej jednostce. Możemy całkowicie uniknąć typowych błędów:
Jeśli ISBN jest klasą, a nie prymitywnym typem, powyższy kod nawet się nie skompiluje, oszczędzając później dużo czasu na debugowanie.
źródło