前提
我相信有一种方法可以客观地定义“好”和“坏”的面向对象设计技术,并且作为一个社区,我们可以确定它们是什么。这是一个学术练习。如果以认真和决心完成,我相信这将对整个社区大有裨益。社区将受益于拥有一个我们都可以指出的地方,“这种技术是‘好’或‘坏’,除非有特殊情况,否则我们应该或不应该使用它。”
计划
对于这项工作,我们应该关注面向对象的原则(而不是函数式、基于集合或其他类型的语言)。
我不打算接受一个答案,而是希望这些答案有助于最终收集或成为对问题的理性辩论。
我意识到这可能会引起争议,但我相信我们可以解决一些问题。大多数规则都有例外,我相信这就是分歧所在。我们应该作出声明,然后注意相关的例外情况和反对者的反对意见。
基础
我想尝试定义“好”和“坏”:
“好” - 这种技术将第一次起作用,并且是一个持久的解决方案。以后很容易更改,并且会很快支付其实施的时间投资。它可以在未来得到维护程序员的一致应用和轻松识别。总体而言,它有助于实现良好的功能并降低产品生命周期内的维护成本。
“坏” - 这种技术可能在短期内有效,但很快就会成为一种负担。很难立即改变或随着时间的推移变得更加困难。初始投资可大可小,但很快就会成为不断增长的成本,最终成为沉没成本,必须不断消除或解决。它是主观应用且不一致的,将来可能会令人惊讶或不容易被维护程序员识别。总体而言,它会导致最终增加维护和/或操作产品的成本,并抑制或阻止对产品的更改。通过抑制或阻止变化,它不仅成为直接成本,而且成为机会成本和重大责任。
起动机
作为一个我认为好的贡献应该是什么样子的例子,我想提出一个“好的”原则:
关注点分离
[简短的介绍]
例子
[代码或其他类型的示例]
目标
[解释这个原则可以防止什么问题]
适用性
[为什么,在哪里,什么时候使用这个原则?]
例外
[我什么时候不使用这个原理,或者它实际上在哪里有害?]
异议
[请在此处注意来自社区的任何不同意见或反对意见]