在DDD中,域模型由实体和值对象组成,但是当我们需要模型中的某些内容时,我们该做什么?域模型:既不是实体也不是价值对象
例如,我已经介绍了以下ScheduledItems<T>
执行情况,以便封装调度细节:
public class ScheduledItems<T>
{
private SortedDictionary<DateTime, T> scheduledItems;
public ScheduledItems()
{
scheduledItems = new SortedDictionary<DateTime, T>();
}
public void ScheduleItem(DateTime scheduledDate, T item)
{
scheduledItems.Add(scheduledDate, item);
}
public void RemoveItem(T item)
{
scheduledItems
.Where(x => x.Value.Equals(item))
.Select(x => x.Key)
.ToList()
.ForEach(k => scheduledItems.Remove(k));
}
}
本课程将通过对调度的目的,一对夫妇实体使用。
在这一点上,这既不是一个实体(它没有身份),也不是一个价值对象(它不是不可变的)。
一个解决方案是通过使其成为不可变的('添加'或'删除'项目将返回ScheduledItems的新实例)将它变成一个Value Object。
但是,这是真的有必要的东西是不是真的与域相关?这个类可以像其他任何.NET集合一样。
当调度不属于您的域时,将其作为基础设施方面(如日志记录或安全性)处理。 – Jehof 2014-11-06 06:54:05
@Jehof:这完全不是基础设施问题。它纯粹是由域实体使用的'SortedDictionary'包装器。 – davenewza 2014-11-06 11:33:06