帮助将DDD应用于动态表单应用程序

时间:2011-07-07 18:30:15

标签: domain-driven-design

我正在设计一个应用程序,它将向用户显示动态生成的表单,然后用户将值输入表单字段并提交这些值以进行持久化。表格代表员工评估。

一个用例允许管理员(来自HR)定义表单字段。他们应该能够创建新表单,添加/删除表单中的字段并将表单标记为“已删除”。

第二个用例是管理员查看表单并将值输入特定员工的表单字段。他们应该能够随时保存值,并在为同一员工再次查看表单时调用保存的值。

最后,当经理对他们为该员工输入的价值感到满意时,他们可以“提交”表格数据,这些表格数据会将展平数据保存到数据仓库中以进行报告。完成此操作后,将删除数据的“工作”副本,以便下次他们为该员工查看表单时显示为空。

此时我并不关心前端,而是处理位于客户端和数据存储之间的后端服务应用程序。应用程序必须为所需的所有行为提供课程粒度接口。

我的问题是我实际拥有多少聚合根(从中,有多少个存储库等)?我是否将表单定义与表单数据分开,即使我在向用户显示表单时需要两者?

2 个答案:

答案 0 :(得分:1)

我看到两个主要实体,'EmployeeEvaluationSchema'和'EmployeeEvaluation'。 'EmployeeEvaluationSchema'实体将具有'FieldDefinition'值对象的集合,其将包含定义字段的属性,最基本的是字段的名称。 'EmployeeEvaluation'实体将具有'FieldValue'值对象的集合,其包含定义中每个字段的值。在最简单的情况下,它将具有字段名称和值属性。接下来,'EmployeeEvaluation'可以引用'EmployeeEvaluationSchema'来指定特定评估所基于的定义。这也可用于在每次评估中强制执行表单定义。您将拥有两个存储库 - 每个实体一个。如果您使用诸如NHibernate之类的ORM,那么当您检索“EmployeeEvaluation”实体时,即使存在专用存储库,也会检索关联的“EmployeeEvaluationSchema”。

答案 1 :(得分:0)

根据您的描述,您的对象听起来没有任何行为,而且是简单的DTO。如果是这种情况,也许你不应该费心去做DDD。你能想象没有吸气剂的实体吗?有比DDD更好的方法来做CRUDish应用程序。同样,这仅在您的“域名”没有相关行为时才有效。