起初我们有一个模型
class Person extends EntityBase<Person, PersonNumber>{
private PersonNumber personNumber;
private String name;
private Contact contact;
private String educationLevel;
}
class Contact extends ValueObjectBase<Contact> {
private String phone;
private String address;
private String contactPerson;
}
但是现在我们必须与另一个系统名称“System DC”整合,原来的人表被拆开,personNumber,name,phone,address列现在移动到“System DC”。并且“SystemDC”提供了一个数据库视图“DC_PersonView”给我们查询。如果我们需要创建一个人,我们必须从“SystemDC”调用webservice。
所以我们定义一个 personDTO 像
class PersonDTO{
private PersonNumber personNumber;
private String name;
private String phone;
private String address;
}
计划一:
- 将 person 重构为 IPerson 接口
定义一个 PersonWrape 类
class PersonWrape implements IPerson { private Person person; private PersonDTO personDTO; }
在 PersonWrape 存储库中
void SavePerson(IPerson person) { systemDC.saveWebservice(person.getPersonDTO); personRepository.save(person);// map the column not in systemDC like educationLevel to our person table. }
方案2:只修改personRepository:
void SavePerson(IPerson person) {
PersonDTO personDTO = PersonDTO.fromEntiry(person);
systemDC.saveWebservice(personDTO);
personRepository.save(person);// map the column not in systemDC like educationLevel
}
但是查询人会很麻烦..
在这种情况下我们如何建模?请给我们一些建议。