【问题标题】:In MVP (or any architecture), where does data transforming take place?在 MVP(或任何架构)中,数据转换发生在哪里?
【发布时间】:2011-08-24 01:07:36
【问题描述】:

我有一个 MVP 应用程序,它有以下几层:

  • 演示文稿
  • 服务
  • 商务
  • 数据

在表示层和服务层之间我使用 DTO。

假设我使用 L2S 或 EF 从数据库中获取数据。我得到一个可能是 int 或 datetime 等的数据类型。但表示层需要它作为字符串或某种格式。这具体发生在哪里?

服务会这样做吗? DTO?主持人?其他地方?

【问题讨论】:

    标签: architecture


    【解决方案1】:

    有两种类型的转换。

    将数据库字段转换为有用的数据模型对象(可能在您的业务层中),并将您的模型数据转换为某种表示对象。

    前者会将数据库中的 BIT 字段转换为模型中的 Boolean

    后者会将DateTime 转换为演示文稿中的可见字符串。

    这两种转换发生在数据提取点和呈现呈现点。

    【讨论】:

    • 对,为了实现这一点,我倾向于使用适配器 - 将域对象转换为 DTO,反之亦然。然后我也可以使用适配器来例如将日期时间更改为字符串并返回。
    【解决方案2】:

    但是表示层需要它 字符串或某种格式。

    如果表示层 (UI) 需要某种格式(否则它无法互操作),那么您别无选择,只能转换它 - 但转换很可能是 UI具体的;在这种情况下,最好的选择(为了灵活性/关注点分离)是构建一个位于 UI 和它获取数据的地方之间的特定于 UI 的适配器/代理/外观(进行转换)。

    这适用于您可以控制整个系统(UI 除外)的情况。

    我读到你的问题的一个可能的微妙之处不是 UI 需要它以特定格式,而是它,我们应该说“强烈喜欢”它以特定格式吗?在这种情况下,您将在 UI 中构建适配器/代理。

    这适用于您控制 UI 而不是应用其余部分的情况。在您的场景中听起来并非如此 - 但值得一提。

    【讨论】:

    • 是的,我知道适配器模式可能就是其中之一。我发现:适配器是一个类,负责以不同格式布置一些数据所需的逻辑。例如,适配器将从数据库表列中读取的整数中提取位,并将它们转换为一系列布尔值以适应用户界面。 因为我计划让 DTO 来做信息的穿梭,我还需要从域对象到域对象的转换,我想我会这样实现它。
    猜你喜欢
    • 1970-01-01
    • 2013-03-23
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    相关资源
    最近更新 更多