我们正在设计一个具有干净/六边形架构范例的应用程序,但我们是这方面的新手。所以我们有一些问题。
场景是:
- 我们有一个外部 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 对象引用?