消极架构和关于代码的假设 - Matthias Noback - 博客


在Michael Feathers的消极架构中,他列举了Haskell(函数式编程)中提到IO Monad作为一个例子,在面向对象编程中也有类似的例子,通过使用分层和依赖注入等原则,你也可以“保证”某个层中的某个类不会执行做什么事情(单一职责)。下面是该文所举的几个例子:

1. 一个对象的构造函数应该没有任何逻辑,只是接受入参并分配给类的属性。

2. 如果一个对象被注入了很多的依赖者,那么它也不会静态地获取依赖项。

3. 如果类没有标记final,它至少就会有一个子类。
这将是消极架构的一个很好的例子:“你会发现我们从不扩展类,除非它们是非final”,当我看到一个类似“裸体”的或没有final 声明时,我假设它至少会有一个子类。如果没有,也在遗留项目中,否则我就要添加final给它,作为保护其设计和防止滥用的第一步。

4.如果某个属性未标记为”私有“,则至少一个子类会使用这个属性
当我看到一个protected属性时,我认为它是需要的并且实际上是由其中一个子类使用的。如果您可以将此规则应用于您的项目,那将非常有用。一个有用的方面是您的IDE或静态分析工具将能够将某些属性标记为未使用

5.没有类会使用不属于其已发布接口的方法

6.如果一个对象有一个public方法,它就没有任何public static方法

总结
我认为“消极架构”是一种看待应用程序的有趣方式。此外,列举上述例子对我来说是一个令人惊讶的练习。据我所知,这些规则并未写入任何大型编程书籍中。但我们仍然依靠他们生活,并创造出我们应用程序中存在与否的一种情景:什么可以或不可能发生在他们身上。

这非常有用,因为它使我们更安全地更改代码。因此,在进行重构和进行代码审查时,定期验证和实施这些规则是个好主意。