我将 NHibernate 与 RIA 服务和 Silverlight 4 一起使用。我创建 DTO 来通过 RIA 服务传输数据,而不是分发我的域层对象(根据 Martin Fowler 的分布式对象设计第一定律:“不要分发您的对象!” )。 DTO 对象从域层中的五个相应层展平为两层。
这是我的问题。在 Silverlight 4 中进行更改后,RIA 服务知道哪些 DTO 对象已被修改,但在服务器端更新代码中,我需要将更改传输回“真实”域层对象,以便 NHibernate 可以将这些更改应用回数据库。最好的方法是什么?
由于 DTO 旨在轻量级,仅包含客户端所需的信息,因此我显然会not想要将相应的域对象嵌入到 DTO 中。
以下是我考虑过的一些可能性:
1) 在 DTO 对象中保存对域对象的引用。只要only引用被序列化并通过网络发送,not整个引用的对象,那么这可能是一个合理的方法。当然,这些引用在客户端是无效的,因为它们会指向不存在的内存位置,但在旅程结束时,它们可以在服务器端使用。 (?)
2) 与上面相同,但仅在 DTO 对象中保存对域聚合根的引用。然后使用对象关系遍历来获取其他相关的领域对象。
3) 将域对象的 ID 存储在 DTO 中,并使用 NHibernate 的“按 ID 获取”或“按 ID 加载”功能来检索正确的域对象,以便应用更新。
4)同上,但仅对聚合根使用“Get”或“Load”,然后对所有相关对象进行遍历。
也许以上都不理想,还有更好的方法……
每当我在 ORM 之上构建访问层时,我通常会继续将实体的唯一键放入 DTO 中,以便进行跟踪,当然在添加的情况下支持默认(T)。
然后,当对象返回到服务器端时,我可以轻松执行加载,从 DTO 编组更改的值,然后让会话保存它或执行显式保存。
这将是你的 3/4。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)