Мне нравится подход
Clean architecture
Вот есть неплохая модификация:
СтатьяКод
Но самое главное, для хорошей масштабируемости и слабой зависимости компонентов, это:
- не использовать глобальные переменные/синглтоны.
- не передавать объекты через функции/методы/и т.п., где нужна только одна переменная из этого объекта.
- использовать интерфейсы и чистые модели(без логики).