我刚开始使用 DDD,并且对对象和存储库的接口有疑问。假设我有以下对象
public interface IPerson { ... }
public class Student
{
double gpa;
...
}
public class Teacher
{
double salary; ...
}
然后我也有两个存储库,例如
public class StudentRepository :IRepository { public void Save(Student) }
public class TeacherRepository :IRepository { public void Save(Teacher) }
我的问题是,假设我有一个名为 people 的 IPerson 对象列表,有没有一种方法可以让我做类似 repository.Save(persons) 的事情?无需使用反射来确定 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 语句的情况下做到这一点?