Когда дело доходит до графика зависимостей чистой архитектуры, я вижу две версии:
В чем разница между ними в философии дизайна?
Что предпочтительнее?
Каковы основные различия?
В "традиционной" чистой архитектуре нет "данных", есть сущности:
Как видите, поток presentation
-> use cases
-> сущности.
А уровень доступа к данным находится на уровне инфраструктуры (фреймворк/драйверы) (см. БД на схеме).
То, что предлагает Google, больше похоже на Традиционную «N-слойную» архитектуру приложения.
У них есть разные плюсы и минусы, и о них есть много ответов/блогов:
Обычно N-уровневая архитектура немного проще, менее церемониальна и больше подходит для «меньших» проектов/команд. Для многофункциональных проектов и/или больших команд обычно более рекомендуется чистая архитектура.
Моё личное понимание обоих паттернов таково, что это не эксклюзив или если вы сталкиваетесь с их направленностью.
Чистая архитектура фокусируется на графе зависимостей:
Android Layer-Pattern уделяет большое внимание DataFlow:
Различия в организации кода могут быть более очевидными. Модуль данных, о котором идет речь в Android Layer-Pattern, может быть размещен во внешнем круге CleanArchitecture. Согласно правилам шаблона слоев Android, модуль пользовательского интерфейса (который остается в том же круге) не должен иметь доступ к модулю данных.
В нашей команде мы стараемся использовать оба подхода как лучший стандарт для наших более крупных проектов.
Ключом к достижению этого является использование DependencyInversion на внутренних слоях (домене). Для реализации этого в большой команде полезно использовать gradle-modularization и konsit-tests (выполняемые через junit-framework), которые также голосуют в автоматических CI-тестах.