Nano Hash - криптовалюты, майнинг, программирование

Где разместить бизнес-логику в приложении Dagger / MVP

Посмотрев множество демонстрационных приложений Dagger, мне непонятно, где размещаются бизнес-объекты. В типичном трехуровневом приложении есть пользовательский интерфейс, бизнес-уровень и уровень доступа к данным. MVP - это, по сути, трехуровневая архитектура.

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

Может кто-нибудь прояснить, как это нужно сделать.

21.12.2018

  • если бы вам пришлось удалить кинжал или MVP из вашего вопроса, что бы это было? Потому что кажется, вы думаете, что они взаимосвязаны, хотя на самом деле они не имеют ничего общего друг с другом. 21.12.2018
  • Хотя они не имеют ничего общего друг с другом, разработчики на самом деле комбинируют эти два и часто размещают бизнес-логику в модулях, тогда как MVP заявляет, что она должна быть помещена в Модель. Так что этот вопрос нужно решать. Слишком много приложений, которые я видел, помещают бизнес-логику в области, принадлежащие Dagger. Модуль в Dagger - это просто какой-то механизм, который требуется Dagger. Тем не менее, разработчики продолжают вкладывать туда бизнес-логику. Я не говорю, что это неправильно. Просто говорю, что это очень сбивает с толку. 21.12.2018
  • Можете ли вы предоставить ссылку на проект или учебное пособие, в котором это возможно? Потому что я никогда не видел ничего подобного. Dagger - это простая библиотека DI, не представляющая, как бы вы разместили там бизнес-логику, если ее единственной целью является внедрение зависимостей в реальные бизнес-объекты. 21.12.2018

Ответы:


1

Следуя чистой архитектуре, описанной дядей Бобом, весь ваш код, содержащий бизнес-логику (правила) (домена), должен находиться внутри бизнес-уровня.
Например, мы разрабатываем мобильное приложение для онлайн-заказа еды / одежды. Не имеет значения.

Уровень презентации: (состоит из представления и докладчика)

- Докладчик - обрабатывать намерения просмотра (нажатие кнопок, отображение визуализации и т. д.), вызывать бизнес-интеракторы после получения результата от интеракторов, говорит, чтобы просмотреть, чтобы отобразить текущее состояние экрана / макета.
- Просмотр - ничего, кроме визуализации пользовательского интерфейса, сохраняйте представление глупым, вся ваша логика представления должна быть в презентаторе.

Пример случая: На этом уровне вы можете проверить, например: экран корзины, выбранный пользователем, ваш уровень представления делает запрос к интерактору, который возвращает элементы корзины. Если список пуст, в представлении отображается макет с заголовком. Карточка пуста, в противном случае отображается список элементов.

Уровень бизнеса / домена: (состоит из интерактора, вспомогательных классов и т. д.)

Правило номер один - сохранить свой домен слой чистый. Если вы используете gradle, вы можете использовать многомодули с пустыми зависимостями. Только язык, rxjava, потому что это почти стандарт нашего времени.

Пример: Вам необходимо проверить информацию о заказе пользователя (адрес доставки, начальный). Вся ваша логика должна быть здесь. Проверка длины, проверка регулярного выражения и т. Д.

Уровень данных:

Умеет сохранять, извлекать, обновлять и удалять информацию. Все о настойчивости. В случаях с Android: уровень данных может делать http-запрос через retrofit2, room orm и т. Д. Кеш начинается здесь.

Если ваше приложение не содержит большого количества бизнес-правил, вы можете избежать бизнес-уровня. Это зависит от проекта.

Также важно использовать принципы SOLID. Это сделает вашу архитектуру понятной, гибкой и удобной в обслуживании. Дополнительную информацию см. здесь.

21.12.2018
  • Вы можете объяснить, что такое мультипроект с пустыми зависимостями? 26.12.2018
  • @Chandrakanth Я имею в виду мульти-модуль. Вот дополнительная информация. stackoverflow.com/questions/17536652/ 26.12.2018
  • Что вы думаете о размещении бизнес-логики в серверной части по сравнению с уровнем домена / бизнеса в приложении, потому что вы хотите иметь возможность разрабатывать для iOS и Android? Или вы должны просто продублировать его и получить дурацкий бэкэнд CRUD? 28.06.2019
  • @LudvigW Конечно, если вы разрабатываете мобильные приложения для android / ios / любых других, это означает, что почти вся тяжелая логика должна быть сконцентрирована на бэкэнде, потому что легко использовать одну и ту же логику для разных приложений. 17.04.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..


    © 2024 nano-hash.ru, Nano Hash - криптовалюты, майнинг, программирование