在採用域驅動設計時,我經常遇到關於域對象的各種視角的問題,特別是在使用NHibernate時。透視本質上是查看域對象的方式。例如,一個簡化的模型:建模域驅動設計中聚合的不同視角
class Transaction
{
string Id { get; set; }
string CustomerName { get; set; }
DateTime Date { get; set; }
decimal Amount { get; set; }
decimal Tax { get; set; }
}
class Batch
{
string Account { get; set; }
string Number { get; set; }
DateTime? ClearDate { get; set; }
IList<Transaction> Transactions { get; }
decimal Total { get; }
}
該批次的總屬性是每筆交易金額的總和。當考慮單個批次時,這個模型運作良好,並且是該領域的適當表示。客戶端應用程序具有顯示批次集合的屏幕。該屏幕不需要關於批次內交易的任何細節,只需要總金額。在列表屏幕上使用相同的對象很慢。一種選擇是使總資產是可設置的,另一種選擇是創建一個新的類,如:
class BatchOverview
{
string Number { get; set; }
decimal Total { get; set; }
}
這將有自己的倉庫和自己的NHibernate的映射到數據庫視圖。
- 此對象是否屬於域模型,還是更多應用程序/ GUI特定?
- 批次概覽對象應引用批處理對象嗎?
- 這是一種常見的模式?
- 有沒有關於這個問題的任何指導?
DDD具有有界上下文的概念,但在這種情況下,上下文是相同的。 Batch類和BatchOverview類都引用相同的「實際」批次 - 它們是不同的視圖或透視圖。