2

私はDDD(ドメイン駆動設計)のやり方をしようとしています。そして少年は私に苦労します。私が読んだすべての本で、認証は問題ではなく、言及されていません!ドメイン駆動型設計のコンテキストで、認証と認可に関する情報はどこにありますか?

ユーザーの登録とログイン、塩漬けパスワードの作成などを担当する独自の認証サービスとメンバーシップサービスを作成しました。.NETのメンバーシッププロバイダは使用しませんが、フォーム認証を使用します。

私は今、私はドメインモデルの残りの部分はユーザーに自分自身を懸念べきではないと思います

Eメール、PasswordHash、承認ステータスなど、ユーザー名を保持しているUserモデルを実装しました。 Personとその関連データをモデル化するために使用されるPersonクラスがあります。このようにして、ユーザーおよび非ユーザーの個人データをモデル化することができます。 Companyタイプのオブジェクトは、ユーザーではなく人物で動作します。アクティビティは、ユーザではなく、個人に割り当てられます。

質問、PersonモデルをUserモデルに関連付けるにはどうすればよいですか?私は本当に2つのモデルのいずれかでお互いの参照をしたくないです。 PersonUserという関係モデルを作成し、現在認証されているユーザーのPersonオブジェクトを取得する追加のサービスを作成する必要がありますか?

答えて

2

あなたが提示したものから判断すると、あなたが知られている事実をいくつ持っている:すべてのユーザーがすべての人がいることをユーザ

  • をされないが、

    1. をその場合、ユーザーモデルでもあり、null可能なUserIdフィールドを含むように拡張して、ユーザーでもある人物にPersonを関連付けることができます。今

      私はまた、あなたが持っていると仮定するつもりだいくつか...などのID、名前、部署、によって人を取得するために...人モデル内のメソッドを「取得」

      私が過負荷になり

      (または別の)fetchメソッドを作成して、UserオブジェクトからPersonオブジェクトも取得します(これはidまたはfollユーザオブジェクトのいずれかです)。あなたはすべてのユーザーでも人であることは周知の事実を持っているので、私は個人的に人のプロパティが含まれるようにユーザーオブジェクトを拡張しても害もファウルを見ないもちろん

      public IPerson Fetch(IUser user) {} 
      

      、...

      public interface IUser 
      { 
          ... 
          IPerson Person { get; set; } 
      } 
      

      それから、あなたはいつものようにユーザーオブジェクトを返すことができます。そしておそらく、ユーザーの人物フィールドを怠惰に読み込んでしまいます。

      ユーザ<の "マッピング"テーブルを作成するとわかりません。私が上で概説した以上のものをたくさん得ようとしています。ただし、ハードコアDBAからあなたを非正規化するデータ)..私には、同じ効果を得るために参加する余分なテーブルです。

  • +0

    私はそれをやりませんが、あなたのご意見ありがとうございます。私は、ドメインモデル内と私のデータベースの両方で、私のユーザを私のPersonモデルから切り離しました。物事を明確にするのを手伝って以​​来受け入れられている質問。 – kitsune

    +1

    受諾いただきありがとうございます。私は本当にあなたがこれにどのようにアプローチしたか、そしてあなたの最終的な解決策が何であったかを聞いて本当に興味があります。私はオープンな心を保つことを確信しており、同じ問題に対する多くの異なるアプローチが誰もがより良いエンジニア/建築家になるための助けとなることを覚えています。 – datacop

    関連する問題