gpt4 book ai didi

silverlight - 如何在 RIA 服务中使用 NHibernate 和 DTO

转载 作者:行者123 更新时间:2023-12-04 06:48:09 25 4
gpt4 key购买 nike

我将 NHibernate 与 RIA 服务和 Silverlight 4 一起使用。我创建 DTO 以通过 RIA 服务传输数据,而不是分发我的域层对象(根据 Martin Fowler 的分布式对象设计第一定律:“不要分发您的对象!” )。 DTO 对象从域层中的五个对应层被展平为两个层。

这是我的问题。在 Silverlight 4 中进行更改后,RIA Services 知道哪些 DTO 对象已被修改,但在服务器端更新代码中,我需要将更改传输回“真实”的域层对象,以便 NHibernate 可以将这些更改应用回数据库。这样做的最佳方法是什么?

由于 DTO 是轻量级的,只包含客户端所需的信息,我显然会 不是 想要在 DTO 中嵌入相应的域对象。

以下是我考虑过的几种可能性:

1) 在 DTO 对象中保存对域对象的引用。只要只有引用被序列化并通过网络发送,而不是整个引用的对象,那么这可能是一种合理的方法。当然,引用在客户端是无效的,因为它们会指向不存在的内存位置,但在行程结束时,它们可以被服务器端使用。 (?)

2) 同上,但只在 DTO 对象中保存对域聚合根的引用。然后使用对象关系遍历来获取其他相关的域对象。

3) 将域对象的 ID 存储在 DTO 中,并使用 NHibernate 的“Get” by ID 或“Load” by ID 功能来检索正确的域对象,以便应用更新。

4) 同上,但只对聚合根使用“Get”或“Load”,然后对所有相关对象使用遍历。

也许以上都不是理想的,有更好的方法......

最佳答案

每当我在 ORM 之上构建访问层时,我通常会继续将实体的任何唯一键放在 DTO 中,以便对其进行跟踪,当然,在添加的情况下还支持 default(T)。

然后,当对象返回到服务器端时,我可以轻松地执行加载,从 DTO 编码更改的值,然后让 session 保存它或执行显式保存。

这将是您的 3/4。

关于silverlight - 如何在 RIA 服务中使用 NHibernate 和 DTO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3495178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com