DDD:提交和批准合同的模式

时间:2013-05-20 03:51:02

标签: c# architecture domain-driven-design

我正在开发一个存在以下要求的应用:

  • 用户在表单中提交一些数据,并将其作为“草稿副本”保留。
  • 另一方面,审批人阅读并采取一些行动(批准,拒绝等)
  • 如果批准人批准副本草案,它将成为合同,双方将受到法律约束。原始提交者可以返回并更改草稿副本,然后重新提交。当审批者批准最新版本时,现有合同将替换为新版本。

我正在努力解决的问题是我们正在尝试在我们的项目上使用DDD,而且没有任何解决方案真的“感觉正确”。我们对现代DDD都缺乏经验,因此找到合适的模型非常困惑。

这不是文档管理问题。提交者总是只有一份草稿副本,有时候合同中没有一方可以编辑(通过重新提交草稿副本进行编辑)。出于这些目的,这两个域概念中的字段是相同的。

是否有一些可以应用的设计模式或DDD友好解决方案?

1 个答案:

答案 0 :(得分:2)

我不确定你在这里想要什么,但我建议你看一下EventSourcing模式。它对跟踪域对象的更改非常有用。 关注Martin Fowler:

  

Event Sourcing确保对应用程序状态的所有更改都是   存储为一系列事件。我们不仅可以查询这些事件   也可以使用事件日志来重建过去的状态,并作为一个   基础自动调整状态以应对追溯   变化。

Greg Young:

  

拥有两个模型的另一个问题是它   必须更多的工作。必须创建代码以保存当前   对象的状态,必须编写代码来生成和   发布事件。无论你怎么做这些事情呢   即使你有,也不可能比仅发布事件更容易   使存储当前状态完全无关紧要的事情   文件存储,仍然有努力将其带入   项目

-Greg Young -

当用户提交“草稿副本”时,应该引发一个事件并将其存储到EventSourcing中。 另一个用户提出另一个“草稿副本”将被EventSourcing对象捕获并标记为新版本。如何使它不同你应该应用DDD。文档对象是Domain对象并具有标识符。

对于每个版本的实体,从Eventsourcing查询和更新状态会很容易,并且会收回对象的版本。

您可以从MSDN获取有关EventSourcing的更多参考信息。

希望得到这个帮助。