良いリポジトリ/ IoCデザインを保つために、私は現在の問題を解決する最善の方法を見つけようとしています。適切なリポジトリデザイン、あるオブジェクトを別のオブジェクトに結びつける
Member
とCharacter
の2つのオブジェクトがあります。
基本的に、1つのメンバーは多くの文字を持つことができます。十分に簡単です。
Member
{
IList<Character> Characters { get; set; }
}
IMemberRepository
...
interface IMemberRepository
{
MemberCreateStatus CreateMember(string email, string password);
bool ValidateMember(string email, string password);
bool ChangePassword(string email, string password, string newPassword);
void RecoverPassword(string email);
}
がありそしてICharacterRepository
interface ICharacterRepository
{
Character CreateCharacter(string name);
}
はそれでは、私の質問は非常に簡単ですがあります。論理を追加してをMember
に追加する場所を教えてください。 IMemberRepository
でこれを行いますか?それは私にとって面倒なようです。それはIMemberRepository
の仕事の範囲を超えているようです。 ICharacterRepository
に追加しますか?メンバーシップの知識を分かち合うことに違反しているように見えるので、それも私にはちょっと変わったようです。何が最善の取り組みですか、ここですか?
これだけの方法であれば、それほど大きな問題ではありませんが、2つのクラスの間には他にも多くのことが起こります。お互いに関連する2つのオブジェクトのこの状況にアプローチするための「標準」の方法は何ですか?私はこれをASP.NET MVCでコーディングしています。
私のリポジトリは、データベースアクセスを必要とするので、1 validateMemberを行います。私のモデルに縛られていません。なぜAdd(T)メソッドを使うにはカスタムコレクションの実装が必要なのでしょうか? – Ciel
さて、あなたが言っているものを手に入れていますが、これは今私がもっと混乱しています。データストアからデータを取り出さなければならないもっと複雑なロジックを置くことになっているのはどこですか?私はリポジトリが私がデータにアクセスした場所だと思ったので、ビジネス層とUI層はデータ層の知識を持っていませんでした。 – Ciel
あなたのリポジトリはメンバー自体を検証しません。データベースから 'Member'データを取得し、それをビジネス層に返します。ビジネス層は、パスワードが正しいことを検証します(または、レポジトリによってレコードが返されたことを確認します)。 – KallDrexx