0

我正在創建一個新的ASP.Net網站「not mvc」,並且願意讓數據訪問層有2個版本,一個使用Linq to Sql,另一個使用ad.net實體框架。 注意:kigg在MVC網站上做的是一樣的,並且比我想要的要複雜得多。 我瞭解到實現我的目標的最佳模式是使用存儲庫設計模式。如何對這個Repository模式和ASP.Net網站架構進行排序?

我的問題是,在我的代碼和層「dal,bal,ui」開關會發生什麼?換句話說,我將更改代碼以將linq應用於sql到ado.net實體框架,反之亦然。

我寫道:

IRepository repository; 

然後在類constuctor

repository = MyRepositoryLinqToSql(); 

可一些人有智慧教我這部分的架構?

回答

1

如果你想創建一個可插入式架構,以便能夠換出上飛庫層,那麼你將需要創建一個接口後面的所有東西,然後使用像StructureMap這樣的東西來動態地交換你需要的東西。

你會想定義一個類庫,如AccountRepository。一個用於LINQ to sql LSAccountRepository和EFAccountRepository。這兩種將從IAccountRepository繼承和有方法,如GetAccountByID,SaveAccount,DeleteAccount等

然後使用StructureMap你會有語法像這樣基於對正在加載在系統上加載相應的庫。

IAccountRepository _accountRepository = ObjectFactory.GetInstance();

然後,通過您的配置,您可以指定IAccountRepository的默認實現,並將其替換爲指向任一時間的實現。

如果這太複雜,那麼可以使用依賴注入模式,因爲您可以使用IAccountRepository參數的方法。此方法將由控制器(MVP或MVC)調用,您可以在此時傳入適當的引用。這樣,您不會直接實例化可能需要一個存儲庫而不是另一個存儲庫的方法。

即使你決定做DI模式,你仍然可以使用StructureMap。當你實例化一個具有StructureMap知道的其他依賴項的對象時(在構造函數中),那麼StructureMap也會加載這些對象。然後,具有所需方法的對象的調用者將成爲唯一需要的鬆散耦合,因爲StructureMap將動態地爲您處理髒兮兮的工作。

1

這是一個需要回答的重要問題,但是您可以添加一個構造函數,它將IRepository實例作爲參數並在類中使用它。至於如何填充它,請做一些關於反轉控制容器的研究,如Spring和Windsor。這些工具會獲取關於您想要使用的特定實現的配置細節,然後自動將這些實例傳遞給類的構造函數和屬性。

例如,您可以指定你想要的IRepository的版本在你的app.config文件來使用,並徘徊無論這似乎在構造您所選擇的類的實例將被傳遞。

相關問題