2014-11-06 62 views
3

在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集合一樣。

+6

當調度不屬於您的域時,將其作爲基礎設施方面(如日誌記錄或安全性)處理。 – Jehof 2014-11-06 06:54:05

+0

@Jehof:這完全不是基礎設施問題。它純粹是由域實體使用的'SortedDictionary'包裝器。 – davenewza 2014-11-06 11:33:06

回答

0

該類看起來像ScheduledItems的存儲庫。因此,ScheduledItem是實體,ScheduledItems是具有Add(),Remove()方法的存儲庫。

+0

它不是一個存儲庫,'ScheduledItem'也不是一個實體。一個實體可以像使用'List'或'Dictionary'一樣使用這個類。這實際上是'SortedDictionary'的封裝。 – davenewza 2014-11-10 06:23:44

0

我想這取決於爲什麼項目排序。

如果需要根據特定業務規則對其進行排序,那麼這應該是您的域的一部分。

如果需要對它們進行排序以便在界面中正確顯示,那麼這很可能只是一些不應該成爲域的一部分的視圖邏輯。

如果以上都不是,我會認爲這是一個類似集合的助手類,它可能位於可用於其他層的基礎架構層的一部分中。

相關問題