2011-11-11 12 views
1

使用接口時,應該從何處檢索每個對象的硬實現。這是通過爲每種類型創建一個工廠對象來完成的嗎?使用接口時,具體對象應該總是由工廠方法返回嗎?

IRepository<User> userRepository = new UserRepository(connection); // Needs a dbconnection 
userRepository.Create(user); 

//Is this the best way? 
IRepository<User> userRepository = RepositoryFactory.GetUserRepository(connection); 

public static class RepositoryFactory 
{ 
    public static IRepository<User> GetUserRepository(DbConnection connection) 
    { 
     return new UserRepository(connection); 
    } 
} 

什麼是最合理的方式來獲得UserRepository對象的工作?如果我使用UserRepository的工廠對象,我是否傳入連接對象或該流程是什麼?

回答

1

正如約翰說,你可以使用國際奧委會。但是,如果你認爲你想在你的應用程序中增加一層額外的解耦,那纔是有效的。如果您使用IoC,它也會使存根/嘲諷變得更容易。但是我知道,有時在項目中引入新的活動片段可能會很痛苦。

工廠確實是一條路。我會通過高級抽象進入工廠。一個字符串或一個類似「FromADatabase」或「FromANetwork」的枚舉。它直到工廠根據需要查找適當的構造細節(例如從配置文件),構建所需的具體對象並將其傳回。

所以儘可能的消費者而言,他們去一家工廠,說一些非常高的水平,如我需要的東西從那裏,纔會這樣。它直到工廠去弄清楚如何創建一個具體的實現問題並將其傳遞給調用者。

相關問題