2012-03-23 11 views
4

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

今週はDapperが見つかりました。私はEF4からDapperに移行しています!

通常私は...私のアガサ・リクエスト・ハンドラで一般的なリポジトリを注入

しかし、どのように私は、Dapperのを使用する必要がありますか?

1)私はAgathaハンドラにIDbConnectionを注入する必要がありますか? 次に、Dapperクエリまたは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が静的メソッドを使用していることを認識しています。 メモリに問題が発生していませんか?

ご迷惑をおかけして申し訳ありません...この権利をしようとしています。

はミゲル

+0

レコードを挿入するには、Dapper-Rainbowを参照することもできます。 (NuGetで利用可能)。 PS:3) - dapperは開いている接続を取得します。 – Alex

+0

はい、私はDapper-Rainbowを見つけました...しかし、私は3でこのコードを壊すことを検討しています:接続を保持するデータベース、トランザクションのセッションとメソッドのリポジトリ。どう思いますか?私はそれがテストの方が良いと思います。どう思いますか?私はここに私のコードを掲載します... –

+0

あなたは何をしましたか? – GorillaApe

答えて

0

後期答え、 をありがとう、私はあなたのリポジトリの実装が本当に「データアクセスオブジェクト」であることを指摘したいと思います。リポジトリは全体の集約を処理します。一緒に属している物のグループ。理想的には、インタフェースは集約ルートタイプのオブジェクトを受け入れ、返すだけでよい(たとえば、Repository<User>はメソッド​​またはIEnumerable<User> Find(...) {}を持つ可能性があります)。

永続化メカニズムの使用法または存在は実装の詳細であり、通常はリポジトリインターフェイスには属しません。また、SQLも話さないでしょう。