2012-03-19 7 views
0

私はレイヤードアプリケーションを持っています。私は、アクティブなユーザーに関する情報が格納されたオブジェクトを返すメソッドを配置する場所を決定しようとしています。レイヤーは以下のとおりです。現在のユーザーの情報を返すにはどのレイヤーを配置する必要がありますか?

  1. データアクセス層(Entity Frameworkの)
  2. ドメイン・レイヤー(POCOS)
  3. UIレイヤ(ウェブ、モバイル、およびWindows)

層Iは、配置する必要があります方法?これはメソッドです:

internal static User ActiveUser() 
    { 
     var name = System.Threading.Thread.CurrentPrincipal.Identity.Name; 
     if (string.IsNullOrEmpty(name)) 
     { 
      return null; 
     } 
     else 
     { 
      using (EfContext db = new EfContext()) 
      { 
       return db.Users.Single(u => u.UserName.ToLower().Equals(name.ToLower())); 
      } 
     } 
    } 

答えて

0

私の答えは「」メソッドが存在してはならないということでしょう。少なくとも今はそうではありません。 CurrentPrincipalの名前を取得することは、ドメイン(ドメインサービス)、またはDALではなく別のアプリケーションサービスの機能である可能性があります。

しかし、ドメインにはEfContextが表示されないようにする必要があります。一般的な方法は、リポジトリにカプセル化することです。

したがって、ドメイン/アプリケーションサービスは、Userの名前でリポジトリに問い合せることができます。

public User GetUser(string name) 
{ 
    using (EfContext db = new EfContext()) 
    .... 
} 
関連する問題