数据传输对象模式?

时间:2009-01-23 06:44:46

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

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

我通常通过将Customer传递给知道如何创建Word文档,插入书签等的类来完成此操作。

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

我理解这很糟糕,违反了单一的责任主体。

我虽然创建另一个类,如“CustomerReportInfo”,它接受一个Custom并具有关于格式化和检索数据的所有逻辑,这样,Word生成类很小,两者可以互相改变。 / p>

我只是想知道这个课应该叫什么?我已经浏览了一个模式列表,我无法真正看到任何符合描述的内容。它听起来不像是一个策略或代理...它听起来像DTO,但是DTO通常是没有功能的愚蠢类,不是吗?

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我会称之为

CustomerReportGenerator

我知道这听起来很狡猾,但它说明了它的作用而不必发表评论或其他任何内容,

答案 2 :(得分:0)

我不知道模式的名称,但我喜欢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

答案 3 :(得分:0)

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

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

  

数据&gt; <汇编程序> DTO&gt; Word报告生成器

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