最近、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