Wydaje mi się, że to kolejne pytanie o kodowanie na stałe i najlepsze praktyki. Powiedzmy, że mam listę wartości, powiedzmy owoców, przechowywanych w bazie danych (musi znajdować się w bazie danych, ponieważ tabela jest używana do innych celów, takich jak raporty SSRS), z identyfikatorem:
1 Apple
2 Banana
3 Grapes
Mogę przedstawić je użytkownikowi, on wybiera jeden, zostanie on zapisany w jego profilu jako FavouriteFruit, a identyfikator przechowywany w jego rekordzie w bazie danych.
Jeśli chodzi o reguły biznesowe / logikę domeny, jakie są zalecenia dotyczące przypisywania logiki do określonych wartości. Powiedz, jeśli użytkownik wybrał opcję Winogrona, chcę wykonać jakieś dodatkowe zadanie, jaki jest najlepszy sposób odniesienia wartości Winogrona:
// Hard coded name
if (user.FavouriteFruit.Name == "Grapes")
// Hard coded ID
if (user.FavoriteFruit.ID == 3) // Grapes
// Duplicate the list of fruits in an enum
if (user.FavouriteFruit.ID == (int)Fruits.Grapes)
albo coś innego?
Ponieważ oczywiście aplikacja FavouriteFruit będzie używana w całej aplikacji, lista może być dodawana lub edytowana.
Ktoś może zdecydować, że chce zmienić nazwę „Winogrona” na „Winogrono”, co oczywiście złamałoby opcję napisanego na stałe.
Zaszyfrowany identyfikator nie jest do końca jasny, jak pokazano, można po prostu dodać komentarz, aby szybko zidentyfikować, który to element.
Opcja wyliczania polega na duplikowaniu danych z bazy danych, co wydaje się nieprawidłowe, ponieważ może się nie zsynchronizować.
W każdym razie z góry dziękujemy za wszelkie uwagi lub sugestie.
MyApplication.Grape.IDto jąkanie, że tak powiem. „Apple” nie jest „Red_Apple”, podobnie jak identyfikator 3, wynosi również 4. Zatem możliwość zmiany nazwy „Apple” na „Red_Apple” nie ma większego sensu niż deklarowanie, że 3 to 4 (a może nawet 3). Celem wyliczenia jest wyodrębnienie jego numerycznego DNA. Może więc nadszedł czas, aby naprawdę oddzielić dowolne relacyjne klucze DB, które dosłownie nie mają znaczenia w modelach biznesowych.