實現DDD聚合時,我通常會公開表示業務功能的方法,然後這些功能負責修改內部狀態。例如。如何在不依賴持久層的情況下實現DDD Aggregates
public class Order
{
public int Id { get; private set; }
public IEnumerable<LineItem> LineItems { get; private set; }
public void AddLineItem(...) {...}
public void Ship() {...}
public void Cancel() {...}
}
當使用EF6或NHibernate的這個效果很好,因爲上下文/會話可以檢測到所有插入/刪除/子實體的更新。但是,對於EF7,我需要明確指示更改跟蹤器瞭解這些更改。例如。當AddLineItem()
向LineItems集合添加了新的訂單項時,我們必須手動將其添加到上下文中的DBSet
,或通知更改跟蹤器該訂單項的狀態爲Added
。
這意味着我的域對象必須對實體框架有明確的依賴關係,並且我現在必須以某種方式在調用業務函數時傳遞對上下文的引用(或更改跟蹤器)。
這樣的事情我應該暫時解決,因爲EF7最終將具有與EF6/NHibernate相同的功能?還是有沒有這種依賴關係的富域對象的方法?
Thanks @natemcmaster。我是依賴注入的忠實粉絲,但與域對象本身無關 - 只是因爲使用ORM時,通常很難控制持久存儲中對象的實現。 我看到他們提出了更改以支持向子對象的傳播,但是它是否適用於所有操作(添加,更新,刪除)似乎仍不清楚。 –
@PhilDegenhardt更改將應用於添加/附加/更新。有關更多詳細信息,請參閱https://github.com/aspnet/EntityFramework/wiki/Design-Meeting-Notes-(August-27,2015)#addattach-for-graphs。刪除仍在審查中。 – natemcmaster