小巧玲珑。 IoC,测试和Agatha

时间:2012-03-23 23:51:15

标签: testing inversion-of-control dapper agatha-rrsl

在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使用静态方法。    这不会引起一些记忆问题吗?

抱歉这么多问题......我正在努力做到这一点。

谢谢你, 米格尔

1 个答案:

答案 0 :(得分:0)

迟到的答案,但我想指出您的存储库实现实际上是一个“数据访问对象”。存储库处理整个聚合,即。一组属于一起的东西。理想情况下,您的界面应该只接受和返回聚合根类型的对象(例如,Repository<User>可能有方法void Update(User user) {}IEnumerable<User> Find(...) {})。

任何持久性机制的使用或存在都是一个实现细节,通常不属于存储库接口,也不会说SQL。