【发布时间】:2010-07-26 17:24:33
【问题描述】:
在采用域驱动设计时,我经常遇到关于域对象的各种视角的问题,尤其是在使用 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; }
}
批次的总属性是每笔交易金额的总和。在考虑单个批次时,该模型运行良好,并且是域的正确表示。然而,客户端应用程序有一个显示批次集合的屏幕。该屏幕不需要有关批次内交易的任何详细信息,只需要总金额。在列表屏幕上使用相同的对象很慢。一种选择是使 Total 属性可设置,另一种选择是创建一个新类,例如:
class BatchOverview
{
string Number { get; set; }
decimal Total { get; set; }
}
这将有自己的存储库和自己的 NHibernate 映射到数据库视图。
- 此对象属于域模型,还是更特定于应用程序/GUI?
- 批次概览对象是否应该引用批次对象?
- 这是一种常见的模式吗?
- 是否有与此问题相关的指导?
DDD 具有限界上下文的概念,但在这种情况下,上下文是相同的。 Batch 类和 BatchOverview 类都引用同一个“实际”批次——它们是不同的视图,或对它的看法。
【问题讨论】:
标签: nhibernate domain-driven-design