【问题标题】:Data Transfer Object Pattern?数据传输对象模式?
【发布时间】:2009-01-23 06:44:45
【问题描述】:

我遇到了一个问题,需要针对对象“客户”生成基于 Word 的报告。

我通常通过将 Customer 传递给一个知道如何创建 Word 文档、插入书签等的类来做到这一点。

问题在于,我发现自己在这个类中放置了用于检索和格式化有关 Customer 对象的信息的逻辑。

我知道这是不好的,违反了单一责任原则。

我想创建另一个像“CustomerReportInfo”这样的类,它接受一个自定义并具有有关格式化和检索数据的所有逻辑,这样,Word 生成类很小,两者可以相互改变。

我只是想知道这个类应该叫什么?我浏览了一系列模式,但我真的看不出任何符合描述的东西。这听起来不像是一种策略或代理……听起来像 DTO,但 DTO 通常是没有功能的愚蠢类,不是吗?

关于这类似于哪种模式的任何想法?

【问题讨论】:

    标签: language-agnostic design-patterns solid-principles


    【解决方案1】:

    如果是特定单词,我更喜欢 CustomerView 或 CustomerWordView。您在这里触及了 MVC 模式,在这种情况下,第三个概念是控制器类,它从数据库加载 Customer(最好让其他人加载它)并构造视图对象。

    【讨论】:

      【解决方案2】:

      我会这样称呼它

      CustomerReportGenerator
      

      我知道这听起来很讨厌,但它说明了它的作用而无需发表评论或任何其他内容,

      【讨论】:

        【解决方案3】:

        我不知道模式的名称,但我喜欢Application Architecture for .NET: Designing Applications and Services。我会调用报告服务ReportService 并让它访问Customer 的DAL。

        alt text http://i.msdn.microsoft.com/ms978348.f02aa01(en-us,MSDN.10).gif

        【讨论】:

          【解决方案4】:

          你在正确的轨道上,但并不完全在那里。您不希望创建一个新类来负责从 Customer 对象中检索数据并包含该数据,而是希望每个类真正只有一个职责。所以你创建了两个新类。

          基于this article,您似乎想要这样的架构:

          数据 > 汇编程序 > DTO > Word 报告生成器

          Word Report Generator 是您当前用于生成报告的类。 DTO 是一个尽可能简单的对象,同时仍包含特定报告所需的所有数据。 Data 是您关于客户对象的信息。然后是一个特殊的Assembler 类,它包含“用于检索和格式化有关Customer 对象的信息的逻辑”并使用该信息填充DTO。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-07-11
            • 2011-10-22
            • 2012-09-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-01-29
            相关资源
            最近更新 更多