小巧玲瓏。 IoC,測試和Agatha

agatha-rrsl dapper inversion-of-control testing

在MVC 3項目中,我使用EF4,IoC和Agatha-RRSL作為我的服務層。

幸運的是,本週我找到了Dapper,我正從EF4搬到Dapper!

通常我在我的Agatha請求處理程序中註入一個通用存儲庫...

但是我該如何使用Dapper?

1)我應該在Agatha處理程序中註入IDbConnection嗎?然後在處理程序中我使用它與Dapper Query或Dapper Execute?這可以測試嗎?嘲笑呢?

2)我應該為Dapper創建通用存儲庫嗎?也許存儲庫可能是這樣的:

public class Repository {

  private IDbConnection _connection;

  public Repository(IDbConnection connection) {
    _connection = connection;
  } // Repository

  public Int32 Execute(String sql, dynamic param = null) {
    return _connection.Execute(sql, param); 
  } // Execute

  // Query code   
}

IDbConnection將在這裡註入。

存儲庫將被注入處理程序內部。

不知道如何測試這個......

3)我應該將所有代碼放在處理程序中嗎?

using (SqlConnection connection = new SqlConnection(connectionString)) {
 connection.Execute(@"insert Roles(Name) values (@name)", new { name = "Role" }); 
}

但是測試怎麼樣?

4)我已經意識到Dapper使用靜態方法。這不會引起一些記憶問題嗎?

很抱歉這麼多問題......我正在努力做到這一點。

謝謝你,米格爾

熱門答案

遲到的答案,但我想指出你的存儲庫實現實際上是一個“數據訪問對象”。存儲庫處理整個聚合,即。一組屬於一起的東西。理想情況下,您的接口應該只接受和返回聚合根類型的對象(例如, Repository<User>可能有方法void Update(User user) {}IEnumerable<User> Find(...) {} )。

任何持久性機制的使用或存在都是一個實現細節,通常不屬於存儲庫接口,也不會說SQL。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因