2009-08-03 5 views
3

[RequiresCompletedProfile]というコントローラー属性があります。ユーザーがプロファイルを完了していない限り、ユーザーがそこに行かないようにするためのアクションメソッドを置くことができます。ASP.NET MVC Webアプリケーションから複数の別々のデータベース呼び出しを行うことは悪い習慣ですか?

これはうまくいきましたが、1つの種類のユーザーがいても、アプリは2種類のユーザー、すなわちベンダーとクライアントを持つようになっています。

したがって、「User_Profile」テーブルはなくなりました。現在、「Client_Profile」と「Vendor_Profile」があり、それらのスキーマは異なります。 LINQを使用していますが、すべてのLINQオブジェクトをPOCOにマッピングして戻しています。

私のソリューションは、以下の方法を持っていた「USER_TYPE」と呼ばれるインターフェースを作ることだった。

bool IsProfileCompleted(); 

私のクライアントのオブジェクトとの両方のインターフェイスを実装し、それぞれの分野かどうかを決定するための責任を負うことができ、私のベンダーオブジェクト/メンバーはプロフィールの完成を構成します。

しかし、今私は、複数のユーザータイプを持っていることを、私はからプロファイルを引っ張っているテーブルを確認することはできませんので、私はこのような何かをする必要があります:

public class RequiresCompleteProfileAttribute : ActionFilterAttribute 
{ 
    IUserRepository userRepo = new SqlUserRepository(); 
    IClientProfileRepository clientProfileRepo = new SqlClientProfileRepo(); 
    IVendorProfileRepository vendorProfileRepo = new SqlVendorProfileRepo(); 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (filterContext.HttpContext.User.Identity.IsAuthenticated) 
     { 

      // Database call #1 
      var user = userRepo.GetUserByUsername(User.Identity.Name); 

      UserType profile; 

      if (user.UserTypeName == "Client") 
      { 
      // Database call #2 
      profile = clientProfileRepo.GetClientByUserName(filterContext.HttpContext.User.Identity.Name); 

      } 
      else 
      { 
      // Database call #2 
      profile = vendorProfileRepo.GetClientByUserName(filterContext.HttpContext.User.Identity.Name); 
      } 

      if (!profile.IsProfileCompleted()) 
       filterContext.HttpContext.Response.Redirect("/admin/editprofile/"); 


     } 

     base.OnActionExecuting(filterContext); 
    } 

} 

あなたがここにいる私を見ることができます2つのデータベース呼び出しを行い、1つはユーザーのタイプを決定し、もう1つは適切な表からプロファイルを取得する必要があります。

この悪い習慣ですか?もしそうなら、私は代わりに何をすべきですか?

答えて

4

厳密には悪いことではありませんが、ユーザ名に基づいてクライアントにクエリを行うロジックをカプセル化する中間層のビジネスオブジェクトを用意することでうまく対応できます。

+0

@McWafflestix、あなたはちょっと精巧にできますか?私は正確に何をするサービスクラスを作成する必要がありますか? – FalconKick