我正在设计一个应用程序,它将向用户显示动态生成的表单,然后用户将在表单字段中输入值,并提交这些值以进行持久化。该表单表示员工评估。
一种用例允许管理员(来自HR)定义表单域。他们应该能够创建一个新的表单,添加/删除字段的表单,并标记一个表单为‘删除’。
第二种用例是经理查看表单并在表单域中输入特定员工的值。他们应该能够随时保存这些值,并在再次查看同一员工的表单时调用保存的值。
最后,当经理对他们为该员工输入的值感到满意时,他们可以“提交”表单数据,该数据将扁平化的数据持久化到数据仓库中以用于报告目的。完成此操作后,数据的“工作”副本将被删除,以便下次他们查看该员工的表单时,表单将显示为空。
在这一点上,我并不关心前端以及位于客户端和数据存储之间的后端服务应用程序。应用程序必须为所需的所有行为提供过程粒度的接口。
我的问题是,我实际有多少个聚合根(以及由此得到的多少存储库,等等)?在向用户显示表单时,我需要将表单定义和表单数据分开吗?
发布于 2011-07-07 22:54:38
我看到两个主要的实体,'EmployeeEvaluationSchema‘和'EmployeeEvaluation’。'EmployeeEvaluationSchema‘实体将有一个'FieldDefinition’值对象的集合,其中将包含定义字段的属性,最基本的是字段的名称。“EmployeeEvaluation”实体将有一个“FieldValue”值对象的集合,其中包含来自定义的每个字段的值。在最简单的情况下,它将有一个字段名和一个值属性。接下来,“EmployeeEvaluation”可以引用“EmployeeEvaluationSchema”来指定特定求值所基于的定义。这也可用于在每次评估中强制执行表单定义。您将有两个存储库-每个实体一个存储库。如果您要使用诸如NHibernate之类的对象关系映射,那么当您检索'EmployeeEvaluation‘实体时,关联的'EmployeeEvaluationSchema’也会被检索到,即使它有一个专用的存储库。
发布于 2011-07-08 09:35:31
根据您的描述,您的对象听起来没有任何行为,是简单的DTO。如果是这样的话,也许你不应该费心去做DDD。你能想象你的实体没有getter吗?有比DDD更好的方法来做CRUDish应用。同样,只有当您的“域”没有相关行为时,这才有效。
https://stackoverflow.com/questions/6615396
复制相似问题