0

Entity Framework 5.0 を使用する WinForms アプリケーションがあります。

ユーザー ストーリー ベースでコンテキストをインスタンス化して破棄することで、コンテキストを短命に保ちたいと考えています。たとえば、ユーザーが保存をクリックしてから、コンテキストをインスタンス化し、保存して破棄します。

それに加えて、サービス層があり、同じコンテキストをサービスに注入します。

問題は、各ユーザー ストーリー ハンドラーで長いコードになってしまうことです。例えば:

void OnSaveButtonClick(object sender, EventArgs e)
{
    using (var context = new MyEntities())
    {
        var transactionService = new TransactionService(context);

        transactionService.SaveTransaction(...);
    }
}

したがって、クライアントがコードを「読み取り可能」に保つために使用できるパターン (または DBContext のイベント) があるかどうか疑問に思っています。とても有難い。

4

1 に答える 1

1

コンテキストとトランザクションを取得して目的のアクションを実行する関数を作成することで、コードを再構築できます。何かのようなもの:

// Define a new delegate to handle the various actions
public delegate void UseCasehandler(DbContext context);

void PerformUseCase(UseCaseHandler action)
{
    using (var context = new MyEntities())
    {
        var transactionService = new TransactionService(context);
        action(context);
        transactionService.SaveTransaction(...);
    }
}

それからあなたの SaveButtonClick はただ言うでしょう

PerformUseCase(SaveData);

SaveDataそのユースケースに関連するコードはどこにありますか。

void SaveData(DbContext context)
{
    ...
}

さて、これはコードの長さを短くするのにはあまり効果がありませんが、実際の作業を行うコードから定型文を分離します。

Re: Mystere Man のコメント。トランザクションを取得する必要がない場合、この回答はさらに役に立ちません。しかし、 に移動できるすべてのハンドラーで繰り返される他のアクションがあることが判明した場合は、価値があるかもしれませんPerformUseCase

于 2013-06-11T20:54:32.497 に答える