62得票14回答
“开闭原则”背后的意义和理由是什么?

开闭原则指出,软件实体(类、模块等)应该对扩展开放,但对修改关闭。这意味着什么,为什么它是良好面向对象设计的重要原则?

36得票5回答
在引导程序中配置Automapper是否违反开闭原则?

我正在Bootstrapper中配置Automapper,我在Application_Start()中调用Bootstrap(),但有人告诉我这是错误的,因为每次添加新映射时都必须修改Bootstrapper类,所以我违反了开闭原则。 您认为我是否真的违反了这个原则?public stati...

30得票3回答
访问者模式如何不违反开放/封闭原则?

来自维基百科: 该想法是,一旦完成了类的实现,只能修改以纠正错误; 新的或更改的功能需要创建不同的类。这个类可以通过继承重用原始类的编码 据我所知,访问者模式是一种强大的技术,通过使用双重分派遍历实现相同接口的但又不同的对象。在我的Java示例中,我创建了一组形成树结构的对...

25得票7回答
开闭原则与Java中的“final”修饰符

开闭原则指出:“软件实体(类、模块、函数等)应该对扩展开放,对修改关闭”。 然而,Joshua Bloch在他的著名书籍《Effective Java》中给出了以下建议:“设计和文档化以便继承,否则禁止继承”,并鼓励程序员使用“final”修饰符来禁止子类化。 我认为这两个原则明显相互矛盾...

22得票7回答
使用多态实现清除开关条件的干净代码

根据SOLID原则,通过将switch条件转换为类和接口来消除它们通常更好。我想用以下代码实现此目标: 注意:这不是真正的代码,我只是把我的想法放进去了。 MessageModel message = getMessageFromAnAPI(); manageMessage(messa...

19得票5回答
开闭原则和依赖倒置原则有什么区别?

DIP原则的表述如下: 高层模块不应该依赖于低层模块,两者都应该依赖于抽象。 抽象不应该依赖于具体实现细节,具体实现细节应该依赖于抽象。 OCP原则的表述如下: 软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。 我认为如果我们满足了DIP原则,也...

18得票6回答
开闭原则是一个好的理念吗?

这个问题不涉及 OCP 是什么,我也不是在寻找简单化的答案。 我提出这个问题的原因是,OCP 最早是在 80 年代末被描述出来的。它反映了当时的思考和背景。当时的担忧是,在已经经过测试并投入生产的代码中添加或修改功能后,可能会带来太多风险和成本。因此,想法是尽可能避免对现有源文件进行更改,并...

17得票2回答
访问者模式 + 开闭原则

是否有可能实现访问者模式,遵守开闭原则,但仍能够添加新的可访问类? 开闭原则指出:“软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。” struct ConcreteVisitable1; struct ConcreteVisitable2; struct AbstractVis...

15得票6回答
避免使用 If Else 条件语句

我希望重构下面的代码,避免使用if...else,这样每次有新的调查类型时就不必改变方法(开放/封闭原则)。以下是我考虑重构的代码: if (surveyType == SurveySubType.Anonymous) { DoSomething(param1, param2, pa...

13得票3回答
“开放扩展,封闭修改”原则有意义吗?

我觉得Bob Martin需要以“O”开头的东西来补充SOLID,于是他在一些旧书中找到了这个(可能没什么用的)开放/封闭原则。 开放/封闭原则如何与单一职责共存,而单一职责又规定一个类应该只有一个变化原因? 如果我想在一个长期存在的系统中遵循开放/封闭原则,难道我应该拥有数十/数百个类的...