2012-07-11 72 views
0

服务具有dal和域模型图层。域模型可以访问dal来操作数据库。现在需要在域模型中拥有来自另一个对象的一些属性(这将大大简化客户端使用)。但是我对将这些属性(来自“外星人”)的对象填充到给定对象的位置感到困惑。我可以在域模型中做到吗?或者在服务本身?要访问另一个域模型对象的域模型对象

由于我是DDD新手,我会用我自己的话来解释它。项目具有结构为: DAL(知道DTO) DTO 的DomainModel(知道DAL和DTO) 服务(知道的DomainModel和DTO)

服务返回的DTO,并假设我需要添加一些属性dto1(它由domainModel1类操纵),它可以由domainModel2类自然地检索。所以,问题是什么层最适合这个?

P.S.Since模型是一个系统的投影,它是它的元素之间的关系,比没有从domainModel1调用daominModel2的原因,是吗?

+0

由外星人你的意思是在另一个聚合根?如果您可以使用DDD术语,您可以在不显示课程结构的情况下提出一些问题但是,如果不是,你需要展示足够的结构让你知道为什么你认为物体是外星人 – Berryl 2012-07-11 10:14:26

+0

对不起,我是DDD的新手。外星人我的意思是说,如果classA被修改为拥有classB的某些属性,那么我应该把逻辑放在使用classB的能力来检索它的属性,并将其中的一些拷贝到classA – Nickolodeon 2012-07-11 10:25:56

+0

你是否有一些用例心里?它取决于用例和满足用例的类。如果B类可以访问dal并且与A类有关系,则没有一般的DDD原因,即更新A的逻辑不能在B中。 – Berryl 2012-07-11 10:42:08

回答

0

我需要增加一些属性dto1(由 domainModel1类操作)

这里的问题似乎是,你的域对象操纵DTO的。您的域图层应该不受DTO和DAL的影响。

DTO's是特定应用程序如何呈现其数据的细节。 DAL是特定应用程序如何存储数据的细节。这些需要从域中分离出来。

你的域名不应该依赖细节。细节应该取决于域名。

您提到需要将另一个对象的某些属性添加到DTO,这是为了客户端的使用目的。 因此,不要在域中处理。在应用层创建一个服务,将来自Entity1和Entity2的一些数据聚合到DTO中,然后将DTO传递给客户端。