我知道使用控制反轉的(也許是最好的)方法之一是通過構造函數(構造函數注入)注入依賴對象。我應該在注入期間使用傳遞給構造函數的對象嗎?
但是,如果我打電話給這些對象外部使用它們的對象,我覺得我違反了某種規則 - 是這種情況嗎?我不認爲有什麼辦法可以防止這種情況發生,但是我應該建立一個規則(除了被嘲笑的對象之外),我們不應該從這些對象中調用方法?
[編輯]這是我正在做的一個簡單的例子。我有一個FileController
對象,基本上用於編目文件。它使用與數據庫交談的FileDal
對象來插入/查詢/更新File
和Directory
表。
在我真正的實現中,我通過指示Castle使用SQL Server版本的DAL來構建控制器,在我的單元測試中,我使用內存中的Sqlite版本的DAL。但是,由於DAL的實現方式,我需要在使用FileController
時調用BeginTransaction和Commit,以便連接不會關閉,我可以稍後進行檢索和斷言。爲什麼我必須這樣做並不重要,但它讓我認爲調用其他客戶端(控制器)使用的DAL對象上的方法聽起來並不健康。這裏有一個例子:
FileDal fileDal = CastleFactory.CreateFileDal();
fileDal.BeginTransaction();
FileController fileController = new FileController(fileDal);
fileController.CallInterestingMethodThatUsesFileDal();
fileDal.Commit();
我很感興趣的是看到一個簡單的例子,你正在做什麼。這可以讓我們更多地瞭解你的特定情況。 – Steven 2010-09-18 20:04:46