domain-driven-design - 域建模: Neither an Entity nor a Value Object

标签 domain-driven-design immutability value-objects

在 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/

相关文章:

go - DDD 从值对象列表中删除文本值对象

java - 值对象中的线程安全

领域驱动设计中的验证

java - Guava ImmutableSet : Builder vs. 的?

c# - 如何在一个工作单元中处理数据库生成的 id 值

java - 如何在JAVA中使返回值不可变

c++ - C++ 中的不可变类和内存

domain-driven-design - 标准值类型作为 DDD 中的 ValueObjects?

c# - 了解 DDD(服务、聚合、实体、存储库和规范)

c# - Clean Architecture 中的用户实体