2011-10-24 9 views
2

私は、データベースアクセス用のコードを生成し、ユーザー識別のために静的オブジェクトを使用するデスクトップアプリケーションで作業しています。ユーザー情報をデータアクセスに渡す

これでロジックの一部をwebserviceで公開する必要がありました。ユーザー情報をパイプでデータベースアクセスクラスにプッシュするために、最も侵入しにくいフォームを探しています。

public class Service 
    { 
     T_DIST_Service record; 
     (...) 

     public bool Update(DataAccess.Base.GetLogin login) 
     { 
      record.Login = login; 
      (...) 
      record.Update(); 
     } 
    } 

:だから、私たちのロジックでこのようなものを持っているでしょうします

public delegate string GetLogin(); 

public class BaseEntity : BaseNotifiableEntity, System.ComponentModel.IDataErrorInfo 
{ 
    public GetLogin Login { get; set; } 
    (...) 
} 

public static class BaseEntityHelper 
{ 
    public static SqlCommand buildUpdateCommand(BaseEntity entity) 
    { 
     UpdateDefaultValues(entity, false); 
     (...) 
    } 

    public static void UpdateDefaultValues(BaseEntity entity, bool affectCreationFields) 
    { 
     if (entity.Login == null && AppServer.RunningApplication.CurrentUser == null) 
      throw new Exception("Something went wrong"); 

     (...) 
    } 
} 

:私たちが思い付いた何

はこのようになります挿入/更新メソッドにデリゲートを渡すことでしたこれはもちろん、アプリケーション内の多くのメソッドを変更することを含みます。 私は依存性注入を使用してこれを達成するためのシームレスな方法があるかどうか疑問に思っていました(たとえば)。

おそらく、あなたの一部は既にこの道を歩み、分かち合うための洞察を持っています。 ありがとうございます。

EDIT 1: 使用して.NET

+0

どのプラットフォームですか? 。ネット? –

+0

私の悪い、プラットフォームは.NETです。 –

答えて

2

アーキテクチャレベルでは、それはあなたがそこに属していないデータアクセス層にロジックを入れしようとしていることを私のように聞こえます。データアクセスコンポーネントはanti-corruption layer以外のものでなければならないので、理想的にはどのロジックも呼び出しレイヤーに実装する必要があります。

しかし、今すぐもっと即座に修正したい場合は、組み込みのThread.CurrentPrincipalアンビエントコンテキストを使用することをお勧めします。

ユーザーオブジェクトが持ち歩かなければならない特別な情報がある場合は、IPrincipalのカスタム実装を使用してカスタムUser Contextを作成できます。

関連する問題