如何尊重原始参数的开/关原则?

Posted

技术标签:

【中文标题】如何尊重原始参数的开/关原则?【英文标题】:How to respect the open/close principle with primitive parameters? 【发布时间】:2013-11-05 12:30:22 【问题描述】:

为了尊重开闭原则,添加参数对象而不是原始模式是一种好的模式吗?

假设我有这个界面

public interface IBar
  void DoSomething(int id);

如果有一天我需要添加一个参数,我将不得不改变我的界面。 有了这个解决方案

public interface IBar
  void DoSomething(DoSomethingParameter parameters);

我可以在不接触界面的情况下添加任意数量的参数,并且我将能够使用新参数创建 IBar 的新实现。

这是一种反模式吗?

【问题讨论】:

不太明白你的问题是什么,但是因为一个好的设计是对扩展开放但对修改关闭的,你显然修改了现有的接口(更不用说你需要更改所有实现的类IBar 也是如此),这是反模式,我们应该尽可能避免更改界面。 【参考方案1】:

当您想将多个相关参数组合成有意义的表示时,最好使用对象作为参数。

在我看来,对整数、字符串等原始类型这样做是多余的,并且不会给您带来任何好处,如果它实际上不会导致每次调用的包装/解包开销。

您还可以看到许多代表Repository 的接口,其中总是有像GetAuthor(int id) 这样的方法,用于通过各自的ID 从数据库中获取元素。

【讨论】:

以上是关于如何尊重原始参数的开/关原则?的主要内容,如果未能解决你的问题,请参考以下文章

LARAVEL:如何使用 SOLID 原则的开闭原则?

如何使用反射满足工厂模式中的开闭原则?

业务逻辑发生变化时如何尊重开闭原则?

列表结果的开闭原则

在这种情况下如何使用 java 尊重单一责任原则?

C# 实例解释面向对象编程中的开闭原则