0

Мы разрабатываем приложение с чистой/гексагональной архитектурой, но мы новичем в этом. Поэтому у нас есть некоторые вопросы.Сторонний поставщик мыла и чистая архитектура

Сценарий:

  • Мы имеем обслуживание внешнего SOAP, который дает нам некоторую «Entity» информацию и связанный с ними «Документом»
  • Для каждого объекта сусла приложения:
    • магазина все документы Entity на CMS (содержимое и некоторые атрибуты Entity-атрибутов)
    • магазин Сущность на DDBB с сохраненной ссылкой на документ

Давайте посмотрим, наше первоначальное решение на Java-подобный подход:

Entity и Документа

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) 
    ... 
} 

ExternalService абстракция на уровне приложений для службы 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); 
    } 
    } 
} 

Вопросы

  1. О ExternalService, это правильно определить его абстракцию с помощью Entity и Document или должен ли он возвращать некоторый объект ValueObject, который реализация UseCase будет преобразовываться в объекты?
  2. О документе, мы должны создать его как совокупный корень и исключить ссылки на объекты документа из Entity?
+2

Знаете, переменные с одной буквой в коде уже являются большими, нет-нет. Я бы использовал правильные контекстуальные имена в описании проблемы вместо неопределенных «F» и «D».Как написано, я вижу мало шансов на то, что кто-то действительно знает, что у вас в мозгу, что вы еще не подписались на текст. – Gimby

+0

Извините @ Gimby! Вы правы – Leo

ответ

1

Краткая версия: попробуйте подумать о любых ваших сторонних сервисах, как о просто другом шлюзе (или «репозитории»).

Как только вы столкнулись с этим самым вопросом (подумайте о системе, в которой пользователи загружают документы как часть более крупного объекта домена «Анкета», а затем анализируют их), я закончил тем, что внешний api/parser (или в вашем случае, сторонняя SOAP-услуга) - это просто другой шлюз. Т.е.: файлы передаются (через загрузку веб-страницы), отправляются с контроллеров webapi на интерактив, передаются через шлюз (в настоящее время как поток, но так же, как они могут передаваться в шлюз/репозиторий db) - где они обрабатываются, и результат возвращается как модель Entity. Таким образом, у Interactor есть шлюз db и шлюз анализатора документов, оба из которых возвращают модели домена, которые можно использовать.

+0

Спасибо @ dale-holborow, мы были смущены тем, как Service Gateway может создавать экземпляры сущностей, когда шлюз репозитория знал что-либо о них и где мы должны управлять возможными дубликатами (т.е. два вызова метода getEntities() возвращают хотя бы один конкретный объект) , – Leo

Смежные вопросы