所有的模型都是錯(cuò)的。所有的模型都應(yīng)該保持簡單。在這兩句話上,經(jīng)濟(jì)學(xué)家和軟件架構(gòu)師能達(dá)成完全一致。或許還包括物理學(xué)家。
識別出哪些是模型哪些是工具至關(guān)重要。它使你的第一個(gè)MVP專注在模型上。使看上去“都重要”的需求也有了天然的優(yōu)先級。
同時(shí),它還使得抽象成了你天然的需要——模型必須是建立在抽象概念上的。接口和實(shí)現(xiàn)也自然分開了。并且,哪些組件必須有接口,哪些組件可以先狗著(工期永遠(yuǎn)不夠)也比較清楚。
想起阿里Java開發(fā)手冊上有一條,要求所有的抽象類都要有Abstract或Base字樣。這是錯(cuò)誤的。十幾二十年前這種做法很普遍。抽象類到底算是模型還是工具?取決于設(shè)計(jì)。很多時(shí)候它是工具,即可以不用它,自己寫個(gè)類實(shí)現(xiàn)接口。這就是近年來業(yè)界很多抽象類都被命名XXXSupport的原因。接口實(shí)現(xiàn)必須以Impl結(jié)尾就更離譜了,這個(gè)后綴本來就是反模式。