【发布时间】:2015-06-29 05:40:06
【问题描述】:
我正在努力坚持领域驱动设计。据我了解,域模型永远不应该是持久感知的。假设我正在构建一个简单的待办事项列表应用程序。我有以下界面的任务:
interface ITask
{
bool IsCompleted {get;}
string Description {get;}
void Complete();
void ChangeDescription(string description);
}
通用实现应该是这样的:
class SimpleTask : ITask
{
public SimpleTask(string description)
{
ChangeDescription(description);
}
public bool IsCompleted { get; private set; }
public string Description { get; private set; }
public void Complete()
{
IsCompleted = true;
}
public void ChangeDescription(string description)
{
// some validation here
// ...
Description = description;
}
}
我希望有一个必要的描述 - 因为这是一个业务规则。因此,从这一刻起,如果我想通过序列化程序保存这个对象,我将失败,因为没有提供无参数构造函数。而且我不应该提供它,因为没有持久性感知规则。如果我以 DTO\POCO 的形式对我的任务进行建模,我最终会遇到另一个问题——所谓的贫血模型。此外,我不想为某些属性提供设置器。
那么解决所有这些问题的方法在哪里?我可以创建一个紧密耦合的保护程序,它将知道如何保存和恢复任务状态。但是我只能访问公共属性和方法,如果任务的内部逻辑很复杂并且无法保存\恢复怎么办?我应该在任务内部标记所有字段并有可能保存对象的内部状态吗?是不是有点代码味道,违反了没有持久性感知规则?
你是怎么解决这个问题的?
【问题讨论】:
-
查看以下讨论 DDD 验证的链接:gorodinski.com/blog/2012/05/19/…
-
@Hughnited 知道了,谢谢你的信息。
标签: c# .net domain-driven-design persistence