Цикл преобразования данных в чистой архитектуре для меня не совсем понятен.
Источник данных получает необработанные данные из локального / внешнего источника, анализирует их и возвращает 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, а затем увеличить лайки в представлении или показать какую-то ошибку.
Прав ли я с этим потоком данных?