鉴于此应用程序设计,放置验证逻辑的最佳位置在哪里?

时间:2010-10-12 17:26:12

标签: asp.net-mvc entity-framework-4 poco validation relational-database

考虑一个ASP.NET MVC 2 Web应用程序项目,该项目使用EF4 POCO实体和存储库模式将信息存储在SQL Server数据库中。到目前为止,有3个项目,如果算上数据库则为4个:

1。)Domain.dll没有依赖关系,暴露了POCO和存储库接口。

2.。)Storage.dll依赖于Domain,实现存储库接口(使用EF 4)。

3.。)Mvc.dll,取决于#1和#2,提供UI层。

4。)SQL Server数据库+连接,dll不可知(无依赖关系)。

假设我添加了另一个Web应用程序来托管WCF数据服务,该服务使用Domain.dll和Storage.dll提供数据库的OData源:

5.)Provider.dll,取决于Domain&存储,提供OData服务层。

域验证逻辑在哪里属于此解决方案?如果域POCO类使用验证属性进行修饰,那么WCF数据服务是否还需要其他任何内容来保护数据?将验证逻辑放入存储过程是不是一个好/坏的想法,为什么?

2 个答案:

答案 0 :(得分:1)

我认为这是主观和议论性的,因为即使是DDD社区也无法对此作出决定。

如果Customer.LastName的新验证要求进入,您需要更改多少个图层? UI层是否可以通知用户域,wcf,web,数据库层是否已拒绝其命令? LastName如何限制LastName不能超过50个字符作为业务域的一部分?

你可以看到这真的是一个讨论,而不是一个可回答的问题。


此外,如果您使用OData作为服务的数据库源,则不使用DDD。您正在使用Persistance-As-Model或DDD-Lite。这实际上是有害的,并导致这样的问题尝试解决使用两个不兼容的模式的问题。

答案 1 :(得分:1)

我想说将DataAttributes放在Domain上并使用MVC中的验证来获取MVC部分,并使用Ent Lib在WCF服务中进行验证。或者,您可以在MVC和WCF中使用Ent Live验证,但这不是它的意义所在。我不知道这需要归结为DDD语义。当模型具有DataAttributes时,MVC会对模型进行验证,因此请遵循该模型并在WCF中执行相同的操作。