2009-04-15 5 views
7

Ich versuche, eines der Validierungs-Frameworks für eine Hauptanwendung zu wählen, und während beide Optionen verlockend scheinen, habe ich mich gefragt, ob es irgendwelche spezifischen Vor- und Nachteile gibt, die ich beachten sollte, bevor ich mich auf das eine oder andere verpflichte.Welches Validierungsframework kann ausgewählt werden: Spring Validation oder Validation Application Block (Enterprise LIrrary 4.0)?

+0

Web oder Desktop? Verwenden Sie andere Entlib-Blöcke? Würden Sie bitte die Architektur angeben? – boj

+0

Es ist für eine Webanwendung. Ich könnte andere Entlib-Blöcke wie Sicherheit und Protokollierung verwenden, da dies in der Anwendung erforderlich ist. Ich werde jedoch nicht Unity verwenden, da dieses Bit von Spring.net behandelt wird. –

+1

Ich habe keine Erfahrung mit Spring.NET, aber ich bin ein großer Fan von EntLib-Blöcken. Sie sollten http://weblogs.asp.net/ricardoperes/archive/2009/03/11/asp-net-validation-with-the-enterprise-library-validation-block.aspx und http: //www.davidhayden lesen .com/blog/dave/archiv/2007/02/28/PropertyProx – boj

Antwort

6

Validierung mit Attributen ist aus meiner Sicht nicht die beste Lösung. Zuerst müssen Sie die Infrastruktur im Domänenmodell referenzieren. Zweitens haben Sie keine Chance, den kompilierten Klassen eine Validierung hinzuzufügen. Schließlich können Sie komplexe Logik mit Attributen nicht validieren und müssen Validate-Methode zu Entität machen, und das scheint nur peinlich.

Meiner Meinung nach sollte die Validierung auf verschiedene Objekte getrennt werden. Zum Beispiel IValidator, wo Sie die Validierung als Regeln definieren können. Die Verwendung von Framework wie xVal hilft bei der Validierung in der Präsentationsebene mit JavaScript.

Sie können nach xVal und FluentValidation for .NET suchen. NHibernate Validator 1.2 Alpha hat auch fließende Syntax und es ist mit xVal integriert (nicht sicher über Alpha, aber 1.0 sollte sein).

Enterprise Validation Block hat auch einige negative Seiten. Die Eigenschaften meiner Entität hatten 3 Attributzeilen und verschlechterten die Lesbarkeit. Der Versuch, die Validierung mit AND- oder OR-Operatoren hinzuzufügen, ist ebenfalls sehr schmerzhaft.

+1

Validierung Application Block muss nicht mit Attributen verwendet werden. Es enthält einen konfigurationsbasierten Validierungsansatz. Lesen Sie diesen Artikel: http://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=46 – Steven

+1

Während ich konfigurationsbasierte Validierung über attributbasierte Konfiguration aus dem gleichen Grund bevorzuge, wie Marek beschreibt, ermöglicht Ihnen VAB 5.0 Definieren Sie Validierungen mithilfe der Buddy-Class-Technik, die von DataAnnotations eingeführt wurde. – Steven

+0

xVal wurde mit ASP.NET MVC 1.0 verwendet und ist derzeit nicht mehr verfügbar –

3

Eine Sache, die ich mit den Enterprise-Bibliothek-Blöcken gefunden habe, ist, dass es Sie zwingen kann, andere Blöcke zu verwenden, die Sie nicht wollen/brauchen. Zum Beispiel könnte die Validierung den Protokollierungsblock verwenden, aber Sie waren mit Ihrem eigenen Protokollierungssystem zufrieden. Jetzt protokolliert deine App die Dinge auf verschiedene Arten. Das heißt, ich mochte das Aussehen des Validierungsblocks in der Ent Lib. Ich habe nicht mit Spring.NET gespielt.

+0

Ich hatte dieses Problem nie mit dem Validation Application Block. Können Sie auf den Code oder den Ort hinweisen, an dem VAB den Logging Application Block aufruft? – Steven

+1

Ich habe einen genaueren Blick darauf geworfen, aber es gibt keine direkten Aufrufe von den Validierungsassemblys der Enterprise Library zu irgendwelchen Protokollierungsassemblys. Ich denke, Ihre Anwendung hat den Protokollierungsteil direkt verwendet. In meinen Anwendungen veröffentliche ich nur die Baugruppen, die spezifisch für den VAB sind. Für VAB 5.0 benötigen Sie: 'Common',' Validation', 'ServiceLocation',' Unity', 'Unity.Configuration' und' Unity.Interception'. – Steven

+0

Dies könnte auf einer älteren Version gewesen sein. Als ich das sah, war es die Version 2.0 der Enterprise Library. – SteveM