Ответ
Clean Architecture может быть избыточной для небольших проектов с простой логикой, например, для прототипов или MVP с минимальным функционалом. Также не стоит её применять, если команда не имеет опыта работы с ней — это увеличит сроки разработки и сложность поддержки.
Пример: простое приложение для отображения списка статей из API.
// Без Clean Architecture
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val recyclerView = findViewById<RecyclerView>(R.id.recycler)
val adapter = ArticleAdapter()
recyclerView.adapter = adapter
RetrofitClient.api.getArticles().enqueue(object : Callback<List<Article>> {
override fun onResponse(call: Call<List<Article>>, response: Response<List<Article>>) {
adapter.submitList(response.body())
}
override fun onFailure(call: Call<List<Article>>, t: Throwable) {
Toast.makeText(this@MainActivity, "Error", Toast.LENGTH_SHORT).show()
}
})
}
}
Здесь Clean Architecture только усложнит код без реальной пользы.
Ответ 18+ 🔞
Давай сразу начистоту, без этих ваших архитектурных понтов. Чистая архитектура — это, конечно, круто, когда у тебя проект размером с Гугл, но если ты пишешь очередную хуйню для отображения списка котиков из API, то это просто ёперный театр.
Представь, ты делаешь прототип, MVP или просто маленькое приложение, где логики — как у мартышлюшки. Ты там три экрана, один запрос к серверу и всё. Зачем тебе там эти слои, интерфейсы, инверсии зависимостей? Это как приехать на дачу на танке — овердохуища шума, а толку ноль. Ты просто картошку посадить хотел, а в итоге весь огород перекопал гусеницами.
И главное — команда. Если твои ребята впервые слышат про Clean Architecture, а ты им такой: «А теперь, сука, сделаем UseCase для загрузки котиков!». Они просто охуеют. Сроки разработки взлетят до небес, а код станет таким запутанным, что разбираться в нём будет только тот, кто его писал, да и то через месяц сам нихуя не поймёт.
Вот смотри на этот пример. Простое приложение, которое показывает список статей. Без всякой архитектуры.
// Без Clean Architecture
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val recyclerView = findViewById<RecyclerView>(R.id.recycler)
val adapter = ArticleAdapter()
recyclerView.adapter = adapter
RetrofitClient.api.getArticles().enqueue(object : Callback<List<Article>> {
override fun onResponse(call: Call<List<Article>>, response: Response<List<Article>>) {
adapter.submitList(response.body())
}
override fun onFailure(call: Call<List<Article>>, t: Throwable) {
Toast.makeText(this@MainActivity, "Error", Toast.LENGTH_SHORT).show()
}
})
}
}
Всё! Работает, понятно, быстро сделано. А теперь представь, что мы сюда притащим Clean Architecture. Нам понадобится: Entity, Model, Mapper, Repository interface, Repository implementation, UseCase, ViewModel, и это ещё если не считать всякие DataSource. И всё это ради того, чтобы в итоге вызвать тот же самый getArticles()? Да ну нахуй, серьёзно. Это же чистой воды пиздопроебибна получается.
Конечно, если ты чувствуешь, что проект реально будет расти, что там будет сложная бизнес-логика, куча источников данных — тогда да, надо думать об архитектуре с самого начала. А если это «попробовать идею» или «заказчику показать макет», то не надо тут выёбываться. Сделал, показал, получил фидбэк. Если идея выстрелит — тогда уже, ебать копать, можно и переписать всё по-взрослому. А пока — не усложняй себе жизнь. Иногда простота — это не признак распиздяйства, а здравый смысл.