在 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 的新实例)将其转换为值对象。
但这对于与域没有真正关联的东西真的有必要吗?此类可以与任何其他 .NET 集合一样。
最佳答案
该类看起来像是 ScheduledItems 的存储库。所以 ScheduledItem 是实体,ScheduledItems 是具有 Add()、Remove() 方法的存储库。
关于domain-driven-design - 领域建模 : Neither an Entity nor a Value Object,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26773074/