Benim için, tek sıraya mı yoksa EAV'ye mi gitmek, onları nasıl tüketmek istediğinize bağlı.
EAV'ın gücü, yapıda değişiklik yapılmadan yeni verilerin eklenebilmesidir. Bu, yeni bir yapılandırma değeri istiyorsanız, tabloya eklemeniz ve kodda istediğiniz yere çıkarmanız anlamına gelir ve etki alanına, şemaya, eşleştirmeye, DAL sorgularına yeni bir alan eklemeniz gerekmez , vb.
Buradaki kusur, kötümser verilerle uğraşmanızı gerektiren sadece en iyi yapıya sahip olmasıdır. Herhangi bir konfigürasyon değerinin her kullanımı, değerin bulunmamasını veya uygun formatta olmamasını beklemeli ve olmadığında buna göre davranmalıdır. Bir yapılandırma değeri bir çift veya bir int veya karakter ile ayrıştırılamaz. Boş olabilir. değer için hiç satır olmayabilir. Bunun etrafındaki yollar genellikle belirli bir kod içi türdeki tüm yapılandırma değerleri için varolan tek bir geçerli "varsayılan" değer gerektirir ( çok nadirdir; daha sık varsayılan değer, hiç yok gibi kod tüketmek için sorunludur) veya varsayılan değerlerin sabit kodlu sözlüğünü saklayın (her yeni sütun eklendiğinde değişmesi gerekir, bu da EAV depolamasının birincil avantajını oldukça değiştirir).
Tek bir geniş satır hemen hemen tam tersidir. Bunu, varolan her yapılandırma değeri için bir alan / özellik içeren bir Configuration nesnesinin tek bir örneğiyle eşlersiniz. Bu değerlerin derleme zamanında ne tür olması gerektiğini tam olarak biliyorsunuz ve eğer bir yapılandırma sütunu mevcut değilse veya uygun tipte bir değer yoksa, DAL'de "hızlıca başarısız oluyorsunuz", istisnaları yakalamak için size bir yer veriyor yapılandırma alımı / hidrasyon sorunları.
Başlıca dezavantaj, her yeni değer için yapısal bir değişimin gerekli olmasıdır; yeni DB sütunu, DAL'deki yeni sütun (eşleme veya SQL sorguları / SP'ler), yeni etki alanı sütunu, kullanımı düzgün bir şekilde test etmek için gerekli.
Bunlardan herhangi birinin kullanılacağı uygun durum, dezavantajların azaltıldığı durumdur. Benim için, config kodlamasının çoğu durumu tek satırlı bir uygulama için çağrıda bulundu. Bunun temel nedeni, programınızın bir bölümünün davranışını düzenleyen tamamen yeni bir yapılandırma değeri tanıtıyorsanız , yeni yapılandırma değerini kullanmak için kodu zaten değiştirmeniz gerekir ; neden yapılandırma nesnesine uğrayıp değil eklemek kullanılacak değeri?
Kısacası, yapılandırmayı depolamak için bir EAV şeması gerçekten çözmeyi düşündüğü sorunu çözmez ve sundukları sorunların çözümünde çoğu DRY'yi ihlal eder.