Просмотр моделей данных слоя в чистой архитектуре - PullRequest
1 голос
/ 06 марта 2020

Цикл преобразования данных в чистой архитектуре для меня не совсем понятен.

Источник данных получает необработанные данные из локального / внешнего источника, анализирует их и возвращает DTO.

Хранилище использует Mapper для создать модели домена из этих данных и вернуться к UseCase.

Но какой тип данных UseCase возвращает к представлению?

Если модели домена содержат сложные логики c - проверки бизнес-правил, некоторые методы и так далее. Представлению это не нужно. Хранение массива этих объектов является ненужной тратой производительности.

Но если представление преобразует эти данные в свои собственные модели - это также снизит производительность, потому что мы должны выполнить итерацию по массиву моделей предметной области и преобразовать их в массив моделей зрения. А до этого мы конвертировали модели данных в модели предметной области. Может быть, я ничего не понимаю)

Например, я выполняю GetAllPostsUseCase.

Я получаю массив из 100 сообщений. На этом шаге у меня Array<IPostResponseDTO>.

Создайте из него модели доменов, чтобы проверить правильность. Здесь у меня есть Either<Failure, Array<Post>>. Или просто Array<Post> для простоты.

Например, модель Post имеет несколько правил проверки и метод "бизнес-правила" addLike, который увеличивает количество лайков, только если оно меньше 100 (например). И View не нужен этот лог c. Например, он используется в AddLikeToPostUseCase.

Затем UseCase возвращает этот массив в ViewModel? И он хранит его как есть в некотором наблюдаемом массиве данных, который передается в View? Или конвертирует в Просмотр моделей слоев и магазинов?

Также, где произошло слияние данных?

Например, у меня есть ... CosmeticShops, в котором есть массив брендов-идентификаторов. Я получаю CosmeticShops из магазина репозитариев, а бренды из BrandsRepository. И в View я должен показать ShopsList магазинов, где пользователь может нажать кнопку на каждой ShopCard, чтобы увидеть список брендов, продаваемых в этом магазине. Где было бы лучше объединить данные для этого ShopsList для использования?

И я был бы признателен, если бы кто-то также объяснил обратный поток данных.

Как я понимаю, что:

В ViewModel у меня есть некоторый наблюдаемый массив сообщений, например js mobx observable, kotlin mutablelivedata, flutter blo c state et c. (Если я правильно понимаю ViewModel)

Например, я выполняю метод addLike(postId) ViewModel.

Этот метод выполняет await this.addLikeToPostUseCase.execute(postId)

Этот вариант использования вызовет const post = await this.postsRepository.getPostById(postId), затем вызовите его метод post.addLike() и в зависимости от результата сохраните этот пост в репо и верните успех или возврат неудачи.

Затем я вижу два варианта:

Я могу либо увеличить количество лайков для этого сообщение в данных ViewModel, и он будет отображаться в представлении. Чем выполнить usecase, и если все в порядке, то ничего не делать, или показать тост с ошибкой или перекусить и отменить изменения в данных ViewModel в случае сбоя.

Или фактически показать загрузчик, сначала выполнить UseCase, а затем увеличить лайки в представлении или показать какую-то ошибку.

Прав ли я с этим потоком данных?

1 Ответ

0 голосов
/ 13 апреля 2020

Общий поток данных:

  • представление передает объект запроса в контроллер
  • контроллер преобразует объект запроса в модель запроса и передает его интерактиву варианта использования
  • интерактив прецедента использует фактическую бизнес-логику c и передает модель ответа презентатору
  • презентатор преобразует модель ответа в объект ответа и возвращает ее в представление

Работа контроллера / докладчика здесь заключается в преобразовании между типами данных, наиболее удобными для просмотра, и теми, которые наиболее удобны для интерактивного сценария использования.

До сих пор я никогда не сталкивался с проблемами производительности из-за эти разговоры о данных.

Для более подробного обсуждения этого потока данных, пожалуйста, проверьте мой пост: http://www.plainionist.net/Implementing-Clean-Architecture-Controller-Presenter/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...