我们正在设计一个具有干净/六边形架构范例的应用程序,但我们是新手。所以我们有一些问题。
场景是:
让我们看看我们关于类似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服务的应用层的外部抽象
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);
}
}
}
问题
答案 0 :(得分:1)
简短版本:尝试将您的任何第三方服务视为另一个网关(或&#34;存储库&#34;)。
我自己刚刚遇到过这个完全相同的问题(想想一个用户将文档作为更大的域对象的一部分上传的系统&#34;调查问卷&#34;然后解析它们),我最终采用的方法是外部api /解析器(或者在你的情况下,第三方SOAP服务)实际上只是另一个网关。即:文件传入(通过网页上传),从webapi控制器发送到交互器,通过网关传输(当前作为流,但与传递到数据库网关/存储库的方式相同) - 处理它们的地方,结果作为实体模型返回。因此,Interactor有一个数据库网关和一个文档解析器网关,它们都返回可用的域模型。