2010-06-01 46 views
2

我有SOA处理差异客户端数据(asp,sl)的数据。这个设计的基础是我的商业模式的领域。为了运输,向客户展示我使用DTO。为了将域映射到DTO,我使用AutoMapper。现在我应该坚持来自客户的新实体。我也想在这种情况下使用我的DTO。所以我有一些问题,因为我不太熟悉这个设计NHibernate。 DTO - >域名

1)在客户端上构建DTO并将其发送到网络服务上是否是一种很好的做法?可能我应该通过我的域名?

2)有可能有几个DTO的一个域(一个在网格上显示,另一个在保存)。为了节省,我需要在客户端设置所有非原生道具。

3)DTO - >到域。如果我有int,我可以使用AutoMapper为这个ID生成NHibernate Proxy,或者我应该手动执行。

您的出场和练习非常有趣。 感谢您的回答!

回答

-1

您的架构通过线路上的DTO变得更加灵活,而不是域模型实体。每个域可以有多个DTO。

3

一个很好的做法是使用屏幕和命令特定的DTO。

一个例子是,当用户正在查看客户显示屏幕时,有一个DTO包含该客户的所有信息(或最多,如果您需要延迟加载某些内容)。

这项技术的价值在于数据可以来自多个来源,这允许您将您的域建模为对您有意义,而不是您的屏幕设置方式。它还允许您在不需要担心屏幕的情况下更改域名,因为您只需更新映射。

根据您的编程语言的不同,可能会有这样的工具,例如AutoMapper(用于C#),它允许您轻松创建域和DTO之间的映射。

+0

我是新的使用这种架构:DTO + NHibernate serviceLayer;您是否将映射/复制域(包括子集合)的版本/时间戳到DTO以达到一致性目的? – kite 2012-07-04 10:11:37

+1

如果知道域对象已经改变很重要,那么你会复制它。这就是说,我已经做了大量的屏幕,最后一次更改获胜是一个完全可以接受的策略。警告人们,每个屏幕上的内容都会发生变化,这会让您的用户感到恼火。 – 2012-07-04 12:53:14

+0

感谢shane,如果您不介意,还有1个问题:) 与更改/脏跟踪相关DTO(DTO的集合)用于从UI网格批量更新/删除/插入;你有关于如何使用NHibernate作为CRUD服务层+ automapper实现这些资源的提示/链接?我不想重新发明轮子(删除标志的负ID,插入的新GUID +如何从DTO的脏属性更新部分域属性,仅更新来自ALL DTO属性的域属性)。 – kite 2012-07-04 19:00:04