這絕對是一個語言不可知論的問題,而且這個問題已經困擾了我很長一段時間了。一個例子可能會幫助我解釋我面臨的困境:一種方法應該承擔多少責任?
讓我們說我們有一個方法負責讀取文件,用一些對象(它存儲來自文件的信息)填充集合,然後返回集合......類似如下:
public List<SomeObject> loadConfiguration(String filename);
讓我們也說,在實施該方法時,它似乎不可行的應用程序繼續,如果集合返回的是空(0大小)。現在,問題是,是否應該在該方法內進行驗證(檢查空集合並可能隨後拋出異常)?或者,這種方法的唯一責任是執行文件的加載並忽略驗證的任務,允許在方法之外的某個階段進行驗證?
我想一般的問題是:是否更好地將驗證與實際正在執行的任務分離?一般而言,這會使事情在稍後的階段更容易改變或建立 - 就我上面的例子而言,在稍後的階段可能會出現這樣的情況,即增加不同的策略以從空的事件中恢復從'loadConfiguration'方法返回集合.....如果在方法中完成驗證(以及生成的異常),這將會很困難。
也許我在尋求一些教條式的回答時過於迂腐,反而它只是依賴於使用方法的上下文。無論如何,我會非常感興趣的是看到別人對此有何評論。
謝謝大家!
我明白這樣的建議的好意,但它有煽動過度工程的風險。 – MaD70 2009-10-19 18:45:56
@我同意的範圍內的MaD70;然而,如果要使用單元測試,保持小而簡單的事情將極大地幫助保持代碼的可維護性。如果它是一個微小的系統,那麼我同意你的觀點。然而,根據我的經驗,最好始終將單一責任抽象出來,否則間接錯誤的風險會增加。 – JamesEggers 2009-10-19 19:36:07