- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 MVC 3 项目中,我使用 EF4、IoC 和 Agatha-RRSL 作为我的服务层。
幸运的是,这周我找到了 Dapper,我将从 EF4 迁移到 Dapper!
通常我会在我的 Agatha 请求处理程序中注入(inject)一个通用存储库 ...
但是我应该如何使用 Dapper?
1) 我应该在 Agatha 处理程序中注入(inject) IDbConnection 吗? 然后在处理程序中我将它与 Dapper Query 或 Dapper Execute 一起使用? 这是可测试的吗?那么 mock 呢?
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 会被注入(inject)这里。
存储库将被注入(inject)到处理程序中。
不确定如何测试这个......
3) 我是否应该将所有代码放在处理程序中?
using (SqlConnection connection = new SqlConnection(connectionString)) {
connection.Execute(@"insert Roles(Name) values (@name)", new { name = "Role" });
}
但是测试呢?
4) 我已经意识到 Dapper 使用静态方法。 这不会引起一些内存问题吗?
很抱歉有这么多问题......我正在努力解决这个问题。
谢谢你,米格尔
最佳答案
迟到的答案,但我想指出您的存储库实现实际上是一个“数据访问对象”。存储库处理整个聚合,即。一组属于一起的事物。理想情况下,您的接口(interface)应该只接受和返回聚合根类型的对象(例如,Repository<User>
可能有方法 void Update(User user) {}
或 IEnumerable<User> Find(...) {}
)。
任何持久性机制的使用或存在都是一个实现细节,通常不属于存储库接口(interface),也不会使用 SQL。
关于testing - 小巧玲珑。 IoC、测试和 Agatha,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9847886/
在 MVC 3 项目中,我使用 EF4、IoC 和 Agatha-RRSL 作为我的服务层。 幸运的是,这周我找到了 Dapper,我将从 EF4 迁移到 Dapper! 通常我会在我的 Agatha
我是一名优秀的程序员,十分优秀!