DDD抛出异常或传递无效实体的borken规则

时间:2014-05-08 04:03:14

标签: c# validation domain-driven-design

在我确切地问你需要帮助的地方之前,让我简要介绍一下基于DDD的网站的架构。

数据库(反腐败层 - 我使用简化术语)

(域模型/实体/聚合)

存储库(调用数据库层和创建/保存实体, 应该抛出验证异常/返回损坏的规则

服务(在“工作单位”下面调用存储库)

MVC (调用服务获取对象)

  • 模型 验证在此处理
  • 模型视图
  • 控制器

这就是我的系统的工作原理(我认为它可以工作:p)

对于保存操作,实体字段验证在2级完成;

  1. 客户端验证(html页面)
  2. 服务器端验证
  3. 但是在服务器端,Model并不验证实体字段,而是尝试保存实体。在保存实体之前,在存储库中完成实际验证。因此,如果实体处于无效状态(某些规则仅在服务器端检查/ javascript代码中发生了一些错误),则会抛出与每个字段关联的错误,或者只是传递破坏规则的列表。然后,模型将设置与每个字段相关的错误,这些错误将使用错误工具提示显示在页面中。

    现在,将破坏的规则从服务传递到MVC模型的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

  1. 区分模型和视图模型。实体应始终有效。应该没有能够将其置于无效状态的方法。哦!你只需在表单中设置其属性?这不是DDD。这是带有贫血领域模型的CRUD。可以使用验证属性和任何其他好方法验证视图模型。您应该返回损坏的验证规则列表,而不是抛出异常。

  2. 区分验证规则和业务规则。这首先是无上下文的,可以在客户端检查,它们是关于形式(at)(数据有意义)而不是内容(命令可以被处理)。应该在实体方法中检查业务规则,这是改变其状态的唯一方法。因此,您为方法提供有效参数,并确定它们是否也可接受。如果不是,则例外是传达它的方式之一。但您也可以考虑替代方案,例如域名事件。