【发布时间】:2019-02-19 15:18:44
【问题描述】:
我需要创建一个系统来与我们客户的不同系统进行通信。将有一个域层进行不同的计算,但为了简单起见,我们只使用一个名为“GenerateToken”的函数,它具有创建访问令牌的算法。
我们有不同类型的客户使用不同版本的 API。为了便于形象化,我将尝试用一个例子来解释:
1.Company A is X type of customer – uses API v.1.0
2.Company B is X type of customer – uses API v.1.1
3.Company C is Y type of customer – uses API v.2.0
4.Company D is Z type of customer – uses API v.1.0
5.Company E is X type of customer – uses API v.1.1
6.Company F is Z type of customer – uses API v.2.0
如果API版本和公司类型相同,则表示生成令牌的方式相同。例如; “GenerateToken”函数将采用相同的参数,并且在示例中的第 2 和第 5 种情况下具有相同的算法。 “GenerateToken”只是一个例子,未来会有更多的计算,这意味着设计的可扩展性(开放关闭原则)是最重要的事情之一。
我的问题是我无法决定应该采用哪种架构或设计模式。我可以使用“GenerateToken”创建一个父类,然后从子函数(多态)中覆盖它,或者使用类似于“工厂方法模式”的东西。但是在这些情况下,我需要为几乎每个公司类型的 API 版本(TypeXApiV1.0、TypeXApiV1.1、TypeYApiV1.0 等)创建一个类,这感觉很愚蠢。
您对这个解决方案有什么建议,或者有什么我可以使用的设计模式。我希望我能解释一下情况。如果有什么我遗漏或没有解释清楚,请告诉我。谢谢。
【问题讨论】:
-
您能否详细说明为什么需要在运行时切换,而不是让不同(编译时)版本的 API 并排放置?
标签: design-patterns architecture software-design