【问题标题】:Does this violates open/closed principle?这是否违反了开放/封闭原则?
【发布时间】:2021-12-15 04:09:33
【问题描述】:

我使用 .NET Core 制作了一个 webapi,并且我有一个“启动”类。这个类有一个“ConfigureServices”方法,它说:

// 这个方法被运行时调用。使用此方法向容器添加服务。

但是每次添加一个新的服务,我都需要“修改”这个方法,但是它违反了开/关原则。

如果我使用 use 和“IF”和“ELSE”标准来做与我修改此方法相同的事情。

那么您对此有何看法?

【问题讨论】:

    标签: .net webapi open-closed-principle solid


    【解决方案1】:

    恰恰相反。您在自己的 Startup 中扩展该方法,而不是修改基本 Startup。来自维基百科的This article 明确指出,为了遵守开放/封闭原则

    软件实体(类、模块、函数等)应该对扩展开放,对修改关闭

    我不太明白你的 if/else 部分是什么意思。

    【讨论】:

    • 关于“if else”,大多数“开放/封闭原则”示例都展示了移除“if else”并创建抽象类或接口等抽象的示例。但是,如果我的类是从基类扩展而来的,那么我是否删除“if else”也没关系?
    • 按照你刚才的说法,基类就像一个“封闭”类,不再可修改,而继承类就像一个“开放”类,随时可以修改?跨度>
    • @Andrews 是的,也不是。关闭意味着当前行为不应该是可修改的(或简化的 - 你不应该/不应该能够修改现有的方法/函数),但应该是可扩展的(在我们的简化中 - 你应该被允许添加新功能/方法以及属性)。大多数情况下,这是用继承示例来解释的(即使它不限于此)。并且你有一个“不可修改”部分的基类,你可以在子类中扩展它的行为,从而消除对 if/else 的需要。所以 if/else 消除是一个(积极的)副作用。
    猜你喜欢
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多