【问题标题】:NHibernate. DTO -> Domain休眠。 DTO -> 域
【发布时间】:2011-02-26 06:27:15
【问题描述】:

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

1) 在客户端构建 DTO 并将其发送到网络服务是否是一种好习惯?也许我应该传递我的域?

2) 一个域是否可以有多个 DTO(一个在网格上显示,一个要保存)。为了节省,我需要在客户端设置所有非原始道具。

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

您的经验和实践非常有趣。 谢谢解答!!!

【问题讨论】:

    标签: nhibernate dns poco dto


    【解决方案1】:

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

    这方面的一个例子是,当用户查看客户显示屏时,有一个 DTO 包含该客户的所有信息(如果您需要延迟加载某些内容,则包含大部分信息)。

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

    根据您的编程语言,可能有诸如 AutoMapper(用于 C#)之类的工具,可让您轻松创建域和 DTO 之间的映射。

    【讨论】:

    • 我是使用这种架构的新手:DTO + NHibernate serviceLayer;您是否出于并发目的将域(包括子集合)中的版本/时间戳映射/复制到 DTO?
    • 如果知道域对象已更改很重要,那么是的,您将复制它。也就是说,我在很多屏幕上工作过,最后一次更改获胜是一个完全可以接受的策略。警告人们每个屏幕上的某些内容都发生了变化,这会让您的用户很快感到烦恼。
    • 谢谢 shane,如果您不介意,还有 1 个问题 :) 与从 UI 网格批量更新/删除/插入的更改/脏跟踪 DTO(DTO 集合)相关;您是否有关于如何使用 NHibernate 作为 CRUD 服务层 + 自动映射器来实现此功能的提示/资源链接?我不想重新发明轮子(删除标志的负 ID、插入的新 guid + 如何仅从 DTO 的脏属性更新域属性的一部分与从所有 DTO 的属性更新域属性)。
    • 我们在这里使用 CQRS,所以对我们来说,每次更改都是不同的命令。一旦用户点击保存,我们就会按顺序执行它们。
    【解决方案2】:

    使用在线 DTO 代替域模型实体,您的架构会变得更加灵活。每个域可以有多个 DTO。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-17
      • 2017-12-11
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多