我自己为此苦苦挣扎。在某些情况下,DTO在演示中有意义。假设我要在系统中显示“公司”下拉列表,并且需要它们的ID来绑定值。
好吧,与其加载可能引用订阅或知道其他内容的CompanyObject,不如发送一个带有名称和ID的DTO。这是很好的恕我直言。
现在再举一个例子。我有一个代表估算值的对象,该估算值可能由人工,设备等组成,可能有很多由用户定义的计算,这些计算将所有这些项目进行汇总(每个估算值可能因类型不同而不同)计算)。为什么我必须对该对象建模两次?为什么我不能简单地让我的UI枚举计算并显示它们?
我通常不使用DTO将域层与UI隔离。我确实使用它们将我的域层与我无法控制的边界隔离。有人在自己的业务对象中放置导航信息的想法很荒谬,不要污染您的业务对象。
有人会将验证放入他们的业务对象中的想法?好吧,我说这是一件好事。您的UI不应完全负责验证业务对象。您的业务层必须进行自己的验证。
为什么将UI生成代码放在busienss对象中?在我的情况下,我有单独的对象,这些对象从UI生成UI代码seperatley。我有将我的业务对象呈现为Xml的独立对象,为了防止这种类型的污染,您必须分开各层的想法对我来说太陌生了,因为您为什么还要在业务对象中放入HTML生成代码...
编辑
我认为,UI信息可能属于域层。这可能会覆盖您所谓的域层,但是我在一个多租户应用程序上工作,该应用程序在UI外观和功能工作流程上具有截然不同的行为。取决于各种因素。在这种情况下,我们有一个表示租户及其配置的域模型。它们的配置恰好包含UI信息(例如,通用字段的标签)。
如果必须设计对象使其具有持久性,是否还需要复制对象?请记住,如果要添加新字段,现在有两个地方可以添加它。如果您使用DDD,是否所有持久化实体都是域对象,这可能会引起另一个问题。我知道我的例子是。