首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪种设计模式最适合这种情况?

哪种设计模式最适合这种情况?
EN

Software Engineering用户
提问于 2013-05-09 06:51:59
回答 3查看 420关注 0票数 3

目前,我有一个名为PolicyProvider的类,它具有以下(简写)接口:

代码语言:javascript
复制
public interface IPolicyProvider
{
    List<Policy> GetRenewalPolicies(Client client, int financialYear);
}

目的是很明显的--每年,保险都会为客户更新,他们会得到一些新的保单。

问题是,政策每年都在变化。因此,需要每年对类的具体实现进行更改(或者用大量丑陋的"if's“来评估财政年度)。我可以看到,随着时间的推移,这将变得可怕。

在这种情况下,哪种设计模式最合适?

EN

回答 3

Software Engineering用户

回答已采纳

发布于 2013-05-14 12:05:51

按照nulliusinverbaS的建议,我将从我最初的评论中找到一个答案。

我认为这是一个工厂模式的场景,您的核心PolicyFactory (或提供者)为任何给定的客户端创建策略。

然后,您就可以拥有一个PolicyFactoryFactory类,一个工厂工厂,也就是(别提尴尬的命名),能够为特定年份创建一个PolicyFactory (不管是PolicyFactory2012还是PolicyFactory2013等等)。

显然,这个元目录仍然能够解析外部文件并根据它们的内容构建策略(正如Florian建议的那样)。

票数 3
EN

Software Engineering用户

发布于 2013-05-09 09:12:11

避免使用"if"s的标准方法是使用子类型和动态绑定。您所需要做的就是为每个财政年度创建子类型的策略。

票数 2
EN

Software Engineering用户

发布于 2013-05-15 02:40:25

您应该使用领域模型模式,因为“策略”(特别是您已经描述过的策略)经常会发生更改,您需要使它们保持足够的隔离,以避免混淆或破坏“正常”的执行路径。

在业务行为受到大量更改的情况下,使用域模型的理由,拥有域模型将降低这些更改的总成本。将所有可能更改的业务行为封装在软件的单个部分中,可以减少执行更改所需的时间,因为所有更改都将在一个地方执行。通过尽可能地隔离该代码,我们减少了其他地方导致代码中断的可能性,从而减少了稳定系统所需的时间。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/197509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档