最初は次のようなモデルがあります
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」と統合する必要があります。元のpersonテーブルが分解され、personNumber、name、phone、address列が「SystemDC」に移動しました。また、「SystemDC」は、クエリ用にデータベースビュー「DC_PersonView」を提供します。人を作成する必要がある場合は、「SystemDC」からWebサービスを呼び出す必要があります。
したがって、personDTOを次のように定義します
class PersonDTO{
private PersonNumber personNumber;
private String name;
private String phone;
private String address;
}
プラン1:
- 人を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
}
しかし、クエリ担当者は問題になります。
この状況でどのようにモデル化しますか?いくつか提案をお願いします。