key words :面向接口編程
面向?qū)ο笤O(shè)計里有一點大家已基本形成共識,就是面向接口編程,我想大多數(shù)人對這個是沒有什么覺得需要懷疑的。
問題是在實際的項目開發(fā)中我們是怎么體現(xiàn)的呢? 難道就是每一個實現(xiàn)都提供一個接口就了事了?反過來說,你有時候有沒有覺得接口是多余的事? 又或者,你僅僅是覺得現(xiàn)在類似spring這樣的框架已習(xí)慣用接口這種方式而心存當(dāng)然。
設(shè)計模式解析里提到了面向?qū)ο笤O(shè)計考慮的幾個視角,一個是概念層,一個是規(guī)約層,一個是實現(xiàn)層。我如果沒有猜錯的話,實際上我們大多數(shù)人的眼睛一直是盯著實現(xiàn)層的,而這正是面向?qū)ο笤O(shè)計所極力避免的,即你不要在一開始就關(guān)注這些細節(jié),你要關(guān)注的是規(guī)約(接口).
對于實際項目開發(fā)來說,如果我們把實現(xiàn)的過程分為多個階段的話我們不妨這么劃分,第一階段,根據(jù)client端的需要去設(shè)計我們的規(guī)約(interface),在這個階段任何實現(xiàn)都沒有,所有的任務(wù)就是定義接口所需要的職責(zé),以及所需要的一些po,vo;第二階段,實現(xiàn)前面定義的規(guī)約。而以前我是怎么做的呢? 我是交叉作的,即假模假樣的定義一個接口(其實我心里在想這個東西有屁用),然后定義了一個方法,然后就立即去實現(xiàn)這個方法,再然后我又定義一個方法,繼續(xù)去實現(xiàn),我現(xiàn)在終于想通了,這樣好累,效率很低,最重要的是,這不屬于真正的設(shè)計。
現(xiàn)在我是怎么做的呢?比如一個list.jsp里需要查詢,列表,然后看明細信息,然后增加信息,我會第一步在接口里定義完(這個過程會有整體設(shè)計的意識),毫不關(guān)心底層實現(xiàn)(數(shù)據(jù)庫、事務(wù)),我的目標(biāo)就是"我想要這個功能,我想要那個功能",至于那個功能怎么實現(xiàn)在第一階段我認為那不是我的事情(盡管這個事情最終還是由我來做) .大家看這個過程和前面的過程有什么本質(zhì)的不同呢? 就是分層的概念更加明顯,你的工作更有層次,每次都有先設(shè)計再實現(xiàn)的步驟,而前面那個過程很容易就讓你不知不覺地陷入純實現(xiàn)的陷阱中。
一點感想,歡迎大家拍磚。