0

最近、MVC 4 プロジェクトでオブジェクトを処理するためにリポジトリ/サービス デザイン パターンを採用しました。

それは間違いなく良い動きでしたが、私は問題を発見しました:)これは私のパターンの適用にかかっている可能性があるので、私はそれをそこに出して、誰かが解決策や適合するデザインパターンを提案できるかどうかを確認しようと思いました.私のニーズ。

カスタムユーザーを処理するためのリポジトリとサービスがあります。これは、ユーザーの取得とユーザーメソッドの実行に完全に機能します。しかし、Repository/Service デザイン パターンに移行する前は、ユーザー関連のメソッドをすべて処理する静的クラスがありました。

これらの方法の 1 つは次のとおりです。

public static Profile CurrentUser()
{
    // TODO: Need to replace the Profile session when any permissions are changed....
    var companyId = HttpContext.Current.Session["CompanyId"].ToString();

    if (HttpContext.Current.User.Identity.IsAuthenticated && !string.IsNullOrEmpty(companyId))
    {
        var userId = Membership.GetUser(HttpContext.Current.User.Identity.Name).ProviderUserKey.ToString();
        var repository = new ProfileRepository(companyId);

        return repository.Get(userId);
    }
    else
        return null;
}

ご覧のとおり、このメソッドは、特定のユーザーがログインしている場合はそのユーザーのプロファイルを返します。ログインしていない場合は、null を返します。

私の問題は、そのメソッドを静的にした理由である任意のコントローラーから呼び出す必要があるため、そのメソッドをサービスとリポジトリから分離する必要があることです。

この問題を解決するために、私は ProfileContext というクラスを作成しました。CurrentUser() は、この静的クラスの唯一のメソッドです。

だから私の質問は簡単です。これが CurrentUser メソッドを処理する最良の方法でしょうか、それとも別のより良い解決策がありますか?

乾杯、/r3plica

4

2 に答える 2