Veri Doğrulama için Tasarım Deseni


23

Bu problem için en iyi tasarım deseni ne olurdu:

Bir Nesne A'ya sahibim. Nesne A, kullanıcı isteğine bağlı olarak veritabanından kaydedilebilir veya silinebilir.

Veri doğrulama, nesnenin kaydedilmesinden veya silinmesinden önce gerçekleştirilir. Nesne kaydedilmeden önce kontrol edilecek bir takım kurallar ve silmeye yönelik başka bir takım kurallar vardır. Bu kuralların bazıları her iki işlem için de ortaktır.

Şimdiye kadar, Sorumluluk Zinciri tasarım modelinin en çok uyduğunu düşünüyorum ama onu uygulamakta zorlanıyorum.


6
Neden Sorumluluk Zinciri tasarım modelinin en uygun olduğunu düşünüyorsunuz?
Adam Zuckerman

Yanıtlar:


17

Normalde her kullanım durumunu doğrulamak için ayrı bir validator sınıfı kullanacağım. Örneğin, veri tabanına ürün eklemeden önce, iş kuralını doğrulamak için AddProductValidator kullanacağım, ürünü silmeden önce, doğrulamak için DeleteProductValidator kullanacağım.

Validator sınıfını yapılandırmak için buradaki yaklaşımı takip ediyorum: http://lostechies.com/jimmybogard/2007/10/24/entity-validation-with-visitors-and-extension-methods/

.NET kullanıyorsanız, Akıcı Doğrulama'yı düşünmek isteyebileceğinizi düşünüyorum ( https://github.com/JeremySkinner/FluentValidation ). Yukarıda bahsettiğim makaleye oldukça havalı ve oldukça yakın olduğunu düşünüyorum


1
Fluent Validation'ın yeni url'si: github.com/JeremySkinner/FluentValidation
Brij

4

Açıklandığı gibi, muhtemelen bir seçenek türü uygulardım . Bu şekilde "Yok" veya doğrulanmış bir değer (belki de tembel olarak) verebilirim, ancak bu bir uygulama detayıdır ve bir Dekoratör kullanma fikrine hoş bir şekilde yol açar .

Dekoratör Deseni

Tabii ki arayüz çirkinleşirse bir cephe kullanırdım .


Dekoratör çalışır, ancak genellikle başka bir sınıfın kullanması için çıktıyı girdi haline dönüştürmek istediğinizde kullanılacak Dekoratör modelini düşünüyorum. Bu durumda, sadece doğrulama yapıyor olacaksınız. Bence sorumluluk zinciri daha iyi işe yarayabilir.
Neil
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.