首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在每类中应用不同参数的开闭设计原则

如何在每类中应用不同参数的开闭设计原则
EN

Software Engineering用户
提问于 2022-05-13 12:24:24
回答 1查看 206关注 0票数 -1

我是一个设计原则和设计模式的新手,这似乎是一个非常愚蠢的问题。

代码中的某些类具有以下结构(图像链接):

https://ibb.co/nrp1t2g

如您所见,我有一个由3个类实现的接口,每个类都重写接口方法execute(string, long, long)

现在,我只需要为第三个类UpdateInDbOperation提供一个额外的函数参数。我已经在下面的链接图中显示了我的需求(见图中红色标记的部分)。对于UpdateInDbOperation类,将需要字符串类型的第四个参数。

https://ibb.co/sCHzhwB

问题:

  1. 如果我向接口添加第四个参数,前两个实现类就会中断。
  2. 我正在寻找一种不违反公开原则的办法来解决这个问题.

为什么我要从IOperation接口实现:

  1. 为了简单起见,我没有展示IOperation接口的其他方法。IOperation包含由所有3个类实现的另一个方法。这种方法不需要改变。
  2. 在我代码库的一个区域中,责任链设计模式用于通过实现IOperation的所有类传递一个对象。
  3. 由于这些原因,我无法停止使用IOperation。简单地说,到目前为止,我的设计还很顺利,而且我认为它是非常可扩展的。但是由于UpdateInDbOperation中的额外参数,我现在对整个设计感到困惑。

我已经尝试/研究过的:

  1. 这个问题可以通过使用带有默认值的参数来解决,但我想避免它们。将来可能会再次出现类似的情况。如果我继续使用默认值增加参数,那么方法调用者最终会忘记参数的实际数量。默认值参数还将向前两个类添加完全未使用的代码。
  2. 这个问题可以通过使用C# params关键字(https://www.geeksforgeeks.org/c-sharp-params/)来解决,但这将使我的界面非常灵活。就我个人而言,我认为接口应该提供一些特定的蓝图,但是如果我使用C# params,那么几乎任何类都可以实现该接口。
  3. 我已经尝试将这个问题融入命令设计模式。但是,我见过的大多数命令示例都使用没有参数的方法/函数。
  4. 我在下面的链接(https://www.geeksforgeeks.org/command-pattern/?ref=lbp)中完成了一个命令模式的实现。这使用另一个辅助接口来隔离方法参数。但我不知道这是否适用于我的情况。

我已经浏览过的

网络链接:

  1. 如何在实践中坚持开放封闭原则
  2. 设计模式中的开闭原理
  3. https://www.geeksforgeeks.org/open-closed-principle-in-java-with-examples/
EN

回答 1

Software Engineering用户

发布于 2022-05-13 12:33:47

解决方案是消除不需要的IOperation接口。

您没有描述额外参数的语义,但可能是特定于数据库操作的内容。因此,调用操作的代码需要知道它正在调用数据库操作,以便提供有意义的值。因此,IOperation接口似乎是不必要的,您如何描述需要这个接口的问题没有什么可谈的。

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

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

复制
相关文章

相似问题

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