我有一个用Nemerle编写的.NET 3.5程序.作为项目依赖项,我有一个.NET 2.0库.我可以确定当最终用户安装.NET 3.5时我的程序会工作,还是我还需要强迫他安装.NET 2.0?
谢谢.
我在Domain Driven Design中坚持不懈.据我所知,域模型永远不应该是持久感知的.假设我正在构建一个简单的待办事项列表应用程序.我有一个以下界面的任务:
interface ITask
{
bool IsCompleted {get;}
string Description {get;}
void Complete();
void ChangeDescription(string description);
}
Run Code Online (Sandbox Code Playgroud)
通用实现应该如下所示:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我希望描述是必要的 - 因为这是一个商业规则.所以从这一刻起,如果我想通过序列化器保存这个对象,我将失败,因为没有提供无参数构造函数.我不应该提供它,因为没有持久性意识的规则.如果我以DTO\POCO的形式模拟我的任务,我将最终遇到另一个问题 - 所谓的贫血模型.而且,我不想为某些属性提供setter.
那么所有这些的解决方案在哪里?我可以创建一个紧密耦合的保护程序,它将知道如何保存和恢复任务状态.但我只能访问公共属性和方法,如果任务的内部逻辑复杂且无法保存\还原会怎么样?我应该在任务内部标记所有字段并且有可能保存对象的内部状态吗?是不是有点代码味道和违反没有持久性意识的规则?
你是如何解决这个问题的?