【发布时间】:2010-08-16 16:28:57
【问题描述】:
我将 NHibernate 与 RIA 服务和 Silverlight 4 一起使用。我创建 DTO 以通过 RIA 服务传输数据,而不是分发我的域层对象(根据 Martin Fowler 的分布式对象设计第一定律:“不要分发你的对象!”)。 DTO 对象从领域层中的五个对应层扁平化为两层。
这是我的问题。在 Silverlight 4 中进行更改后,RIA 服务知道哪些 DTO 对象已被修改,但在服务器端更新代码中,我需要将更改传输回“真实”域层对象,以便 NHibernate 可以将这些更改应用回数据库。最好的方法是什么?
由于 DTO 旨在实现轻量级,仅包含客户端所需的信息,我显然不希望将相应的域对象嵌入到 DTO 中。
以下是我考虑过的几种可能性:
1) 在 DTO 对象中保存对域对象的引用。只要仅引用被序列化并通过网络发送,不是整个引用的对象,那么这可能是一种合理的方法。当然,这些引用在客户端无效,因为它们会指向不存在的内存位置,但在行程结束时,它们可以在服务器端使用。 (?)
2) 同上,但只在 DTO 对象中保存对域聚合根的引用。然后使用对象关系遍历来获取其他相关的域对象。
3) 将域对象的 ID 存储在 DTO 中,并使用 NHibernate 按 ID 的“获取”或按 ID 的“加载”功能来检索正确的域对象,以便可以应用更新。
4) 同上,但只对聚合根使用“Get”或“Load”,然后对所有相关对象使用遍历。
也许以上都不是理想的,还有更好的方法……
【问题讨论】:
标签: silverlight nhibernate silverlight-4.0 wcf-ria-services