讀古今文學網 > 程序員必讀之軟件架構 > 推遲與解耦 >

推遲與解耦

有必要簡單談談推遲技術決策和等到「最後責任時刻」才做出決策。讓我們想像一下,你在設計一個沒有任何特別繁重的非功能需求或約束的軟件系統。你選擇什麼技術重要嗎?一個好的架構難道不應該容許你日後改變主意嗎?

舉個例子,很多人會說,你用哪個關係型數據庫真的不重要,特別是如果你用一個對像關係映射層將代碼與特定的數據庫實現解耦,比如Hibernate、Entity Framework或者ActiveRecord。如果你沒有任何重要的非功能需求或約束,並且確實認為所有的關係型數據庫都是相等的,那麼你用哪一個可能不重要。是的,你可以在代碼中解耦數據庫,推遲技術決策。但是別忘了,當數據庫的選擇不再是重要決策 ,ORM的選擇就是了。你可以通過引入另一個抽像層,在代碼中解耦ORM,但這裡又做了一個軟件系統結構的重要決策。

解耦是很好的方法,原因很多,而且它使技術決策得以推遲。當然,這並不意味著你應該推遲決策,特別是由於非功能需求和約束的存在相關的原因。