0

我想知道是否应该将依赖对象建模为聚合根。假设我有一个TaskList,这个列表有Tasks。ATask不能没有 a 存在,TaskList但可以单独查看和编辑。没有特殊条件TaskList可以检查何时修改或添加任务 - 我认为这将是聚合根的主要原因。唯一的条件是,TaskList它及其任务只能由所有者编辑。TaskList如果有所有者并且只能通过任务列表编辑任务,则很容易确保此条件。否则,我将需要检测所有者或向任务添加所有者字段。

那么这里有什么合适的呢?

  • Task 和 TaskList 都作为聚合根并且每个都有一个所有者字段
  • 只有 TaskList 作为聚合根,Tasks 作为依赖实体

我错过了什么重要的东西吗?

4

2 回答 2

1
  • 如果两者都没有不变量,则将它们设计为单独的聚合。
  • 任务列表是任务的工厂,因此它可以告诉任务谁是任务的所有者。任务的任何后续行为现在都可以验证它们是否由正确的所有者执行(即任务应该记住列表告诉所有者的内容)。然而,从用户体验的角度来看,这似乎是糟糕的设计。为什么要在用户不拥有的任务上启用编辑按钮(或将详细信息显示为可编辑)?是的,中间人攻击是可能的。但是您愿意为此花费多少时间/金钱(这有多重要)?
  • 至于授权,请质疑您的模型中有多少部分。不是说它不是或是,只是要考虑的事情。
  • 可以在此处找到有关聚合设计的更多信息: 有效的聚合设计使用 DDD 提高性能和可扩展性
于 2011-11-03T10:28:54.867 回答
0

我会这样做:

class TaskList{
 User Owner;
 Task[] Tasks;
}

class Task{
 TaskList List; string Description;
 void ChangeDescription(description){
  if(List.Owner!=CurrentUser)
   throw exception or whatever;
  else
   Description=description;
 }
}

// http post
class TaskController{
 ActionResult ChangeDescription(int id, string description){
  _tasks.Find(id).ChangeDescription(description);
 }
}
于 2011-11-09T14:50:12.620 回答