我遇到了一个问题,我需要在对象“客户”上生成基于Word的报告。
我通常通过将Customer传递给知道如何创建Word文档,插入书签等的类来完成此操作。
问题在于,我发现自己放置了逻辑,用于检索和格式化此类中Customer对象的信息。
我理解这很糟糕,违反了单一的责任主体。
我虽然创建另一个类,如“CustomerReportInfo”,它接受一个Custom并具有关于格式化和检索数据的所有逻辑,这样,Word生成类很小,两者可以互相改变。 / p>
我只是想知道这个课应该叫什么?我已经浏览了一个模式列表,我无法真正看到任何符合描述的内容。它听起来不像是一个策略或代理...它听起来像DTO,但是DTO通常是没有功能的愚蠢类,不是吗?
关于哪种模式类似的任何想法?
答案 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。