2

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

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

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

我知道这很糟糕,违反了单一责任原则。

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

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

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

4

4 回答 4

1

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

于 2009-01-23T06:49:04.313 回答
0

我会称之为

CustomerReportGenerator

我知道这听起来很讨厌,但它说它做了什么而无需评论或任何东西,

于 2009-01-23T06:50:11.037 回答
0

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

替代文字 http://i.msdn.microsoft.com/ms978348.f02aa01(en-us,MSDN.10).gif

于 2009-01-23T07:10:19.530 回答
0

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

根据这篇文章,您似乎需要这样的架构:

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

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

于 2009-09-15T16:18:20.700 回答