私は DDD を始めたばかりで、オブジェクトとリポジトリのインターフェースに関して質問があります。次のオブジェクトがあるとします
public interface IPerson { ... }
public class Student
{
double gpa;
...
}
public class Teacher
{
double salary; ...
}
次に、次のような2つのリポジトリもあります
public class StudentRepository :IRepository { public void Save(Student) }
public class TeacherRepository :IRepository { public void Save(Teacher) }
私の質問は、persons という名前の IPerson オブジェクトのリストがあるとします。リフレクションを使用して IPerson が実際にどのタイプであるかを把握する必要はありません。
私は現在別のクラスを持っています
PersonRepository :IRepository
{
public void Save(IPerson person)
{
if(Person is Student)
{
new StudentRepository.Save(person as Student);
}
else if(Person is Teacher)
{ ....}
}
}
次に、personRepository.Save(persons); を呼び出すことができます。ただし、これは物事を構造化するための最適な方法とは思えません。このデザインを改善するにはどうすればよいですか?
ありがとう
編集:
私が探しているのは、person という IPerson オブジェクトを受け取ったとします。私は必ずしもそれがどのような実装であるかを知りません.repository.Save(person)を呼び出して、正しいリポジトリを呼び出したいだけです. リフレクションである種の switch ステートメントを使用せずにこれを行う方法はありますか?