クリーン/六角形アーキテクチャ パラダイムを使用してアプリケーションを設計していますが、これについては初心者です。いくつか質問があります。
シナリオは次のとおりです。
- 「エンティティ」情報と関連する「ドキュメント」を提供する外部 SOAP サービスがあります。
- すべてのエンティティについて、アプリケーションは次のことを行う必要があります。
- すべてのエンティティ ドキュメントを CMS に保存する (コンテンツといくつかのエンティティ属性)
- 格納されたドキュメント参照を使用して DDBB にエンティティを格納する
Java のようなアプローチでの最初のソリューションを見てみましょう。
エンティティとドキュメント
class Entity {
private String id;
// other attributes ...
private Document xml;
private Document pdf;
// some business logic
}
class Document {
private long id;
//other attributes
InputStream getStream() {...}
}
ドメイン層での FRepositori の抽象化
class EntityRepositori {
Entity create(Entity entity);
...
}
ドメイン層での DocumentRepositori の抽象化
class DocumentRepositori {
Document create(Document document)
...
}
SOAP サービスのアプリケーション層での ExternalService 抽象化
class ExternalService {
List<Entity> getEntities();
...
}
アプリケーション層でのユースケースの実装
class IncorporateEntityUseCase {
IncorporateFUserCase(EntityRepositori, DocumentRepositori, ExternalService){...}
void incorporate() {
List<Entity> entities = externalService.getEntities();
for (Entity entity : entities) {
Document xml = dRepository.create(entity.getXmnl());
Document pdf = dRepository.create(entity.getPdf());
entity.setXml(xml);
entity.setPdf(pdf);
entityRepository.create(entity);
}
}
}
質問
- ExternalService については、Entity と Document で抽象化を定義するのが正しいですか、それとも UseCase 実装がエンティティに変換する ValueObject を返す必要がありますか?
- Document については、集約ルートとして設計し、Entity から Document オブジェクトの参照を排除する必要がありますか?