設計的藝術
故宮太和殿,米蘭大教堂,造型各異,但我們都覺得很美,這是因為這些建筑都有一些共同的優秀結構。這些共同的結構,如果用專門的可以度量的客觀標準來評價,就叫做模式。繼而展開到人類社會,模式可以歸納為,描述會不斷重復出現的問題并進而提供解決這些問題的方案的要素。通過模式,解決方案能夠千百萬次地反復應用。
程序員們把這種模式的思想應用于軟件設計——稱為設計模式( design pattern)。于是在程序設計中的設計模式有了建筑學中的相同的作用:
1. 復用解決方案——通過復用已經公認的設計,能夠在解決問題時取得先發優勢,而且避免重蹈前人覆轍。可以從學習他人的經驗中獲益,用不著為那些總是會重復出現的問題再次設計解決方案了
2. 多數設計模式還能使軟件更容易修改和維護。其原因在于,它們都是久經考驗的解決方案。所以,它們的結構都是經過長期發展形成的,比新構思的解決方案更善于應對變化。而且,這些模式所用代碼往往更易于理解——從而使代碼更易維護
3. 模式還為我們提供了觀察問題、設計過程和面向對象的更高層次的視角,這將使我們從“過早處理細節”的桎梏中解放出來
以前學習設計模式的時候,很大程度上只停留在理論上,對應有些模式的應用也只是約定俗成,沒有很強的理解和觸碰心靈的體會,直到最近遇到的麻煩。比如Fa?ade模式,中文叫做面板模式,就是把許多接口放在一個文件里面,程序里其他需要用到接口的地方,都調用這個文件里面的方法。非常簡單的一個模式,似乎對它不肖一顧,因為過于簡單,甚至覺得可以刪去不用了,直到最近需要更改大量的數據接口,才意識到應用設計模式的重要性,尤其是上述第2點。
感謝設計模式
因為深受學院派作風的影響,所以當初寫集成量化平臺的時候,引入了大量的設計模式,也包括了這個Fa?ade模式。這個模式包含了所有的數據訪問接口,其他模塊諸如持倉,交易,報表,回測等等都只跟Fa?ade打交道,至于數據訪問的實現,其他模塊甚至Fa?ade本身都是不清楚的。這就是抽象和解耦,用現在時髦的話來說就是隔離。因為有了隔離,數據訪問如果出現了問題,并不會直接影響到邏輯層面的代碼,可以說一點都沒有影響。所以,如果因為數據提供商的問題或者數據源不穩定,需要切換數據源或者重新實現數據訪問方法,所有的改動只有在數據訪問層。而所有用到數據接口的其他大面積的邏輯層面,沒有一丁點的改動。這大大增加了系統建設升級的效率,顯著提高了代碼的健壯性和韌性。這就是fa?ade模式的好處,因為簡單,所以可以說四兩撥千斤,真不知道如果沒有fa?ade層,邏輯應用方面直接跟數據打交道,那么這場數據接口改動能不能快速的完成,甚至是否能成功都是個問題。可以說這次的代碼重構,大大加深了我對設計模式的理解,可謂實踐出真知。
項目
繼續倡導敏捷開發實踐,增加測試驅動開發(TDD)和scrum的經驗。
以上文字權為反省。