考虑一个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数据服务是否还需要其他任何内容来保护数据?将验证逻辑放入存储过程是不是一个好/坏的想法,为什么?
答案 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中执行相同的操作。