Dla mnie to, czy wybierzesz jednorzędowy czy EAV, zależy od tego, jak chcesz je spożywać.
Moc EAV polega na tym, że można dodawać nowe dane bez zmian w strukturze. Oznacza to, że jeśli chcesz nową wartość konfiguracji, po prostu dodaj ją do tabeli i wyciągnij w żądanym miejscu w kodzie, i nie musisz dodawać nowego pola do domeny, schematu, mapowania, zapytań DAL itd.
Jego wadą jest to, że ma tylko najsłabszą strukturę, co wymaga od ciebie pesymistycznego traktowania danych. Każde użycie dowolnej wartości konfiguracyjnej musi przewidywać, że wartość nie będzie obecna lub nie będzie miała odpowiedniego formatu i będzie zachowywać się odpowiednio, gdy nie będzie. Wartość konfiguracji nie może być przetwarzalna na wartość double, int lub char. Może być zerowy. może nie być wcale wiersza dla wartości. Sposoby obejścia tego zwykle wymagają istnienia pojedynczej prawidłowej wartości „domyślnej” dla wszystkich wartości konfiguracyjnych określonego typu kodu ( wyjątkowo rzadko; częściej wartość domyślna jest tak samo problematyczna przy zużyciu kodu jak żadna) lub prowadzić zakodowany słownik wartości domyślnych (który musi się zmieniać za każdym razem, gdy dodawana jest nowa kolumna, co sprawia, że podstawową zaletą pamięci EAV jest dość dyskusyjny).
Pojedynczy szeroki rząd jest wręcz przeciwny. Odwzorowujesz go na pojedyncze wystąpienie obiektu konfiguracji z polem / właściwością dla każdej istniejącej wartości konfiguracji. Wiesz dokładnie, jakiego typu powinny być te wartości w czasie kompilacji, i „szybko się nie udaje” w DAL, jeśli kolumna konfiguracji nie istnieje lub nie ma wartości odpowiedniego typu, co daje jedno miejsce na wychwytywanie wyjątków w sprawie problemów z odzyskiwaniem konfiguracji / nawadnianiem.
Główną wadą jest to, że dla każdej nowej wartości wymagana jest zmiana strukturalna; nowa kolumna DB, nowa kolumna w DAL (mapowanie lub zapytania SQL / SP), nowa kolumna domeny, wszystkie niezbędne do poprawnego przetestowania użycia.
Właściwą sytuacją do zastosowania któregokolwiek z nich jest sytuacja, w której wady są łagodzone. Dla mnie większość sytuacji związanych z kodowaniem konfiguracji wymaga implementacji jednorzędowej. Wynika to głównie z tego, że jeśli wprowadzasz zupełnie nową wartość konfiguracji, która rządzi zachowaniem jakiejś części twojego programu, musisz już zmienić kod, aby użyć nowej wartości konfiguracji; dlaczego nie wyskoczyć do obiektu config i dodać wartość, która ma być użyta?
Krótko mówiąc, schemat EAV do przechowywania konfiguracji tak naprawdę nie rozwiązuje problemu, który ma rozwiązać, a większość obejść problemów, które przedstawia, narusza DRY.