2016-02-26 57 views
1

在我看来,鲍勃马丁需要一个以O开头的东西来制作SOLID,并在一些旧书中找到了这个(可能无用的)开放/封闭原则。“开放延伸,关闭修改”原则是否有意义?

开放/关闭如何与单一职责并存,表明一个班级应该有单一的变更理由?

如果我想关注长时间生活系统中的开放/关闭,我是否应该有一个数十/数百个类的链,每个类都扩展前一个?

+3

这个问题的答案是”是的“,这会使一个相当糟糕的答案... – PeeHaa

+0

即使这个答案是一个有用的数据点:) –

+1

这可能太开放了 - 但我发现这两个帖子在思考SOLID时很有用:http://accu.org/index.php/期刊/ 1957和http://accu.org/index.php/journals/1957 – doctorlove

回答

2

开放/关闭原则意味着您可以创建通过添加新代码而不是更改旧代码来添加新功能的系统。为了完全符合开放/封闭原则,必须有完美的远见。为了创建一个完全开放的系统,并对所有修改进行关闭,必须能够完美地预测未来。人们必须事先知道客户为了向代码添加扩展点而要求的新功能。

话虽如此,我们可以开发符合开放/封闭原则的系统。通过使用具有大量反馈和重构的迭代过程,我们可以改进最经常变化的系统部分,方法是将它们打开为扩展并关闭以进行修改。

正如Bob Martin在他的一篇演讲中所说:“我们不能完全符合开放/封闭的原则,并不意味着我们应该完全放弃开放/封闭的原则,可能很难整个系统要符合开放/关闭的原则,但要使功能或类别或更小的组件符合开放/关闭原则并不困难“