我试图理解开放封闭原则:
模块应该对扩展开放,对修改关闭
就Java而言,扩展是指继承吗?还是包括继承以及添加新方法或属性?
我也很难理解关闭修改,这似乎意味着一旦编写了一个方法,它就不能更改。
这似乎与实际工作相矛盾,因为我会从jira中接手任务,需要在代码库中至少更改一个方法。
在过去的24小时里,我已经阅读了很多帖子和文章,但我仍然不完全确定这个原则想要传达什么。
任何简单的解释都将非常有帮助。
我试图理解开放封闭原则:
模块应该对扩展开放,对修改关闭
就Java而言,扩展是指继承吗?还是包括继承以及添加新方法或属性?
我也很难理解关闭修改,这似乎意味着一旦编写了一个方法,它就不能更改。
这似乎与实际工作相矛盾,因为我会从jira中接手任务,需要在代码库中至少更改一个方法。
在过去的24小时里,我已经阅读了很多帖子和文章,但我仍然不完全确定这个原则想要传达什么。
任何简单的解释都将非常有帮助。
你应该写出足够好的代码,不需要修改现有的代码。如果你需要现有方法的功能,应该能够调用该方法,因为它应该具有高内聚性和极低的耦合度。
可以这样想,一旦你建造了一座房子,是尝试将浴室扩大一倍(移动厕所和淋浴重新铺设地板、新墙壁等),还是更容易在房子的前面建造一个阳光房并增加一个新的入口?
你应该尽量避免修改卧室,虽然这并非不可能,但建造一个阳光房会更容易创造新空间。
模块应该可以合理地进行扩展。如果不能,潜在用户将编写自己的实现,导致重复。
什么是合理的扩展通常是设计中最困难的部分 - 设计者必须预测最终用户需要哪些扩展。
模块的扩展不能破坏模块/声明的功能内部工作。如果模块未能保护其内部工作不被修改,则更难确保(甚至考虑)模块的正确性。基本上,通过允许用户修改您的模块,您正在为您的模块的合同添加一个要求,即扩展不会以破坏它的方式修改您的模块 - 这通常是未记录的要求,并且无法在没有用户对模块的详细了解的情况下实现。