所有的模型都是错的。所有的模型都应该保持简单。在这两句话上,经济学家和软件架构师能达成完全一致。或许还包括物理学家。
识别出哪些是模型哪些是工具至关重要。它使你的第一个MVP专注在模型上。使看上去“都重要”的需求也有了天然的优先级。
同时,它还使得抽象成了你天然的需要——模型必须是建立在抽象概念上的。接口和实现也自然分开了。并且,哪些组件必须有接口,哪些组件可以先狗着(工期永远不够)也比较清楚。
想起阿里Java开发手册上有一条,要求所有的抽象类都要有Abstract或Base字样。这是错误的。十几二十年前这种做法很普遍。抽象类到底算是模型还是工具?取决于设计。很多时候它是工具,即可以不用它,自己写个类实现接口。这就是近年来业界很多抽象类都被命名XXXSupport的原因。接口实现必须以Impl结尾就更离谱了,这个后缀本来就是反模式。