首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >衣冠楚楚。IoC、测试和Agatha

衣冠楚楚。IoC、测试和Agatha
EN

Stack Overflow用户
提问于 2012-03-24 07:51:15
回答 1查看 2.4K关注 0票数 4

在一个MVC3项目中,我使用EF4、IoC和Agatha-RRSL作为我的服务层。

幸运的是,这周我找到了Dapper,我从EF4转到了Dapper!

通常我会在我的Agatha请求处理程序中注入一个通用存储库...

但是我应该如何使用Dapper呢?

1)我应该在Agatha处理程序中注入一个IDbConnection吗?然后在处理程序中,我将其与Dapper Query或Dapper Execute一起使用?这是可测试的吗?那嘲笑呢?

2)我应该为Dapper创建一个通用存储库吗?也许存储库应该是这样的:

代码语言:javascript
复制
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)我是否应该将所有代码都放在处理程序中?

代码语言:javascript
复制
using (SqlConnection connection = new SqlConnection(connectionString)) {
 connection.Execute(@"insert Roles(Name) values (@name)", new { name = "Role" }); 
}

但是测试呢?

4)我已经意识到Dapper使用静态方法。这不是会引起一些内存问题吗?

很抱歉问了这么多问题...我在试着纠正这件事。

谢谢你,米格尔

EN

回答 1

Stack Overflow用户

发布于 2012-10-08 23:36:19

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9847886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档