4

MVC 3 プロジェクトでは、EF4、IoC、および Agatha-RRSL をサービス レイヤーとして使用しています。

幸いなことに、今週私は Dapper を見つけ、EF4 から Dapper に移行しています!

通常、私は Agatha Request Handlers に Generic Repository を挿入します ...

しかし、どのように Dapper を使用すればよいでしょうか?

1) Agatha Handler に 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 が静的メソッドを使用していることに気づきました。これはいくつかのメモリの問題を引き起こしませんか?

たくさんの質問をして申し訳ありません...私はこれを正しくしようとしています。

ありがとう、ミゲル

4

1 に答える 1

0

遅い答えですが、リポジトリの実装は実際には「データアクセスオブジェクト」であることを指摘したいと思います。リポジトリは、集約全体を処理します。一緒に属するもののグループ。理想的には、インターフェースは集約ルートタイプのオブジェクトのみを受け入れて返す必要があります(たとえば、aにRepository<User>はメソッドvoid Update(User user) {}またはが含まれる場合がありますIEnumerable<User> Find(...) {})。

永続化メカニズムの使用法または存在は実装の詳細であり、通常はリポジトリインターフェイスに属しておらず、SQLについても説明していません。

于 2012-10-08T15:36:19.087 に答える