Структура пакетов в Clean Architecture

291
17 июня 2017, 12:05

Как правильно раскладывать пакеты в проекте, если используется "Чистая архитектура"? Есть ли какие-то нормальные проекты-примеры реализации Clean Architecture или просто реальные проекты, основанные на этой архитектуре? Все что я видел, было на примере "Hello World" и многое не имело смысла.

Евгений Мацюк (не нуждается в представлении), предложил разбить проект на корневые модули (или пакеты, но я буду называть "модулями", имея ввиду корневой пакет, чтобы не путаться):

  • Presentation — разбит на функции, каждая функция имеет отдельный пакет, каждый пакет имеет подпакеты view и presenter. Возникают воросы: 1. Правильно ли я понял, что функция может иметь несколько экранов? 2. Куда класть разные реализации кастомных View (именно адроидовское View), адаптеров и прочего?
  • Domain — вопросов очень много и без предварительного просмотра проекта, можно спрашивать очень и очень долго.
  • Repositories — как я понимаю, пакеты внутри модуля должны быть разбиты по типам данных (Users, News и т.д.). В каждом пакете — свой репозиторий.
  • Data — в целом, все понятно (как минимум, пока не начал писать).
  • DI — для меня модуль-загадка. Каждый модуль может иметь свой граф зависимостей и разрастаться по десяткам подпакетов. Если пытаться реализовать модуль DI так, чтобы только он занимался зависимостями, тогда DI должен знать полностью о всем графе зависимостей других модулей. Как-то неправильно.

Так же я не понял, куда класть класс Application и классы типа RxUtils, NetworkUtils с остальными классами-утилитами, доступными на протяжении всего проекта?

Answer 1

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

Существует два основных подхода к структуре пакетов:

  1. Разбитие по слоям
  2. Разбитие по функциям

Подробнее о этих двух подходах можно почитать тут — ссылка.

В качестве проекта-примера можно посмотреть проект Евгения Мацюка для Mobius. Так же сейчас сообщество администраторов канала "Clean Architecture` в Telegram разрабатывает реальный проект для демонстрации этой архитектуры в рабочих условиях.

READ ALSO
Русские символы regex в java

Русские символы regex в java

Почему получаются разные результаты следующих методов?

302
Пример использования SpeechRecognizer

Пример использования SpeechRecognizer

Здравствуйте, может ли кто дать простой пример использования SpeechRecognizer? Мне нужно чтобы пользователь говорил на английском, и это выводилось...

283
background-size в некоторых браузерах

background-size в некоторых браузерах

ЗдравствуйтеМне нужно поставить фоновую картинку для элемента меню, так, чтобы эта картинка была прижата к низу элемента, и растянута на всю...

267
Как вывести html с input?

Как вывести html с input?

Как сделать чтобы html код, который введен в поле, выводился правильно, то есть текст стал жирным?

381