ドメイン駆動設計のコンテキストで認証と承認に関する情報はどこで入手できますか?
質問
DDD(ドメイン駆動設計)の方法で物事をしようとしています。そして、私は苦労しますか。私が読んだすべての本で、認証は関係なく、言及されていません!
ユーザーの登録とログイン、ソルトパスワードの作成などを行う独自の認証およびメンバーシップサービスを作成しました。.NETのメンバーシッププロバイダーは使用しませんが、フォーム認証に依存しています。
ユーザー名、電子メール、PasswordHash、ApprovalStatusなどを保持するユーザーモデルを実装しました
これで、ドメインモデルの残りの部分は、ユーザーに関係するものではないはずです。 Personとその関連データをモデル化するために使用されるPersonクラスがあります。そのため、ユーザーおよび非ユーザーからの個人データをモデル化するために使用できます。 Companyタイプのオブジェクトは、UsersではなくPersonsで動作します。また、アクティビティはユーザーではなく個人に割り当てられます。
質問、PersonモデルをUserモデルにどのように関連付けるのですか? 2つのモデルのいずれかで、相互に参照することは本当に必要ありません。 PersonUserというリレーションシップモデルを作成し、現在認証されているユーザーの個人オブジェクトを取得する追加のサービスを作成する必要がありますか?
解決
提示した内容から判断すると、いくつかの既知の事実があります。
- すべてのユーザーは人です
- すべての人がユーザーであるわけではありません
その場合、個人モデルを拡張して、null許容のUserIdフィールドを含めることで、ユーザーであるユーザーのユーザーとユーザーを関連付けることができます。
ここで、いくつかの<!> quot; Fetch <!> quot;があると仮定します。人物モデルのメソッド.. ID、名前、部署などで人物を取得する
フェッチメソッドをオーバーロード(または別の方法で作成)して、ユーザーから人物オブジェクトも取得します(これはidまたはfollユーザーオブジェクトのいずれかです)。
public IPerson Fetch(IUser user) {}
もちろん、あなたはすべてのユーザーも人間であるという既知の事実を持っているので、個人的には、ユーザーオブジェクトを拡張して人物のプロパティを含めることに害や反則はありません...
public interface IUser
{
...
IPerson Person { get; set; }
}
その後、いつものようにユーザーオブジェクトを返すことができます..おそらく、ユーザー内の人物フィールドのファンキーな遅延読み込みを行うか、ユーザーオブジェクトを取得するときに両方を設定します。
<!> quot; mapping <!> quot;を作成するかどうかわかりません。ユーザーの表<!> lt;-<!> gt;私が上で説明した以上のことをあなたがたどり着くでしょう(ただし、データを非正規化するためにハードコアDBAから工藤を取得します)。 / p>