2008年2月15日 星期五

K15 令人感到麻煩的設計(8)──每個設計項目有各自的Data Model Interface

曾經接觸過一個系統,裡面的Data Model實作是一個巨大的Map,它提供了兩個最單純的存取方法:getData(String name)與setData(String name, Object value)。系統裡所有需要存取Data Model的地方只都經過這兩個方法。

這在存取的時候既方便又好學,作出來的功能也不會有什麼問題,但麻煩來自於後面的一個需要:有個專案有其中一個模組的需求,詢問是否能夠reuse我們設計好的模組。我回答不容易,因為這個Data Model沒有設計Interface所以使用的模組只能用它,而且沒有根據Module來定義它所能存取的Data,變成必須要去追所有程式碼才能找出用到哪些名稱的Data。最後當然沒人要去作這種追溯而情願重新寫一個。

這就是沒有Interface並加上多合一設計的糾結。沒有定義介面變成使用時一定要依賴該Class、沒有定義該Module專用的Interface就難以快速得知它使用的資料範圍、入口的合併造成不容易分辨執行時要存取什麼資料;Data Model像是無形的鎖鏈, 將明明分開設計的Module綁死在一起。這使得要記得Interface是一個規格,定義時以能夠只觀看Interface就能明白它提供了什麼樣的功能為目標。

沒有留言:

張貼留言