gpt4 book ai didi

testing - 小巧玲珑。 IoC、测试和 Agatha

转载 作者:行者123 更新时间:2023-11-28 19:54:29 26 4
gpt4 key购买 nike

在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com