image

Access unlimited bootcamps and 650+ courses

50
%OFF
Article image
Alexandre Santicioli
Alexandre Santicioli29/07/2024 02:30
Share

Clean Architecture - Uma Alternativa Profissional

  • #Kotlin
  • #Android
  • #Clean Architecture

Uma Alternativa Clean Architecture para Seu Projeto Android

A arquitetura limpa, popularizada por Robert C. Martin e adaptada por Tom Hombergs em seu livro “Get Your Hands Dirty on Clean Architecture”, oferece uma abordagem estruturada para o desenvolvimento de software, separando claramente as responsabilidades e facilitando a manutenção e a escalabilidade do código. Neste artigo, aplicaremos esses conceitos em um projeto Android utilizando Kotlin, Jetpack Compose, Gradle e Hilt.

image

A arquitetura limpa é baseada em princípios de design que promovem a separação de responsabilidades e a independência de frameworks e bibliotecas. Ela é composta por várias camadas, cada uma com uma responsabilidade específica:

  1. Camada de Entidades: Contém as regras de negócio mais gerais e independentes.
  2. Camada de Casos de Uso: Define as operações específicas do aplicativo, utilizando as entidades.
  3. Camada de Interface de Usuário: Responsável pela apresentação dos dados e interação com o usuário.
  4. Camada de Implementação: Contém as implementações concretas de interfaces e dependências externas.

Arquitetura Limpa: É uma abordagem de design de software que promove a separação de responsabilidades e a independência de frameworks e bibliotecas, facilitando a manutenção e a escalabilidade do código.

image

Para implementar a arquitetura limpa em um projeto Android, utilizaremos Kotlin, Jetpack Compose para a interface de usuário, Gradle para o gerenciamento de dependências e Hilt para a injeção de dependências.

Kotlin: É uma linguagem de programação moderna e concisa, recomendada para o desenvolvimento Android.

Jetpack Compose: É um kit de ferramentas moderno para a criação de interfaces de usuário de forma declarativa.

Gradle: É a ferramenta padrão para o gerenciamento de dependências e automação de builds em projetos Android.

Hilt: É uma biblioteca para injeção de dependências que simplifica a integração com outros componentes do Jetpack.

image

Vamos criar um aplicativo de gerenciamento de tarefas que segue a arquitetura limpa. O projeto será dividido em módulos correspondentes às camadas da arquitetura.

build.gradle (Projeto)

plugins {
  id 'com.android.application'
  id 'org.jetbrains.kotlin.android'
  id 'dagger.hilt.android.plugin'
  kotlin("kapt")
}

android {
  compileSdkVersion 33
  defaultConfig {
      applicationId "com.example.cleanarchitecture"
      minSdkVersion 21
      targetSdkVersion 33
      versionCode 1
      versionName "1.0"
  }
  buildFeatures {
      compose true
  }
  composeOptions {
      kotlinCompilerExtensionVersion "1.4.2"
  }
}

dependencies {
  implementation "androidx.core:core-ktx:1.9.0"
  implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.5.1"
  implementation "androidx.activity:activity-compose:1.6.1"
  implementation "androidx.compose.ui:ui"
  implementation "androidx.compose.material:material"
  implementation "androidx.compose.ui:ui-tooling-preview"
  implementation "com.google.dagger:hilt-android:2.45"
  kapt "com.google.dagger:hilt-android-compiler:2.45"
}

MainActivity.kt

package com.example.cleanarchitecture

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.hilt.navigation.compose.hiltViewModel
import com.example.cleanarchitecture.ui.TaskScreen
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class MainActivity : ComponentActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
      super.onCreate(savedInstanceState)
      setContent {
          TaskScreen()
      }
  }
}

TaskScreen.kt

package com.example.cleanarchitecture.ui

import androidx.compose.material.*
import androidx.compose.runtime.Composable
import androidx.hilt.navigation.compose.hiltViewModel
import com.example.cleanarchitecture.viewmodel.TaskViewModel

@Composable
fun TaskScreen(viewModel: TaskViewModel = hiltViewModel()) {
  val tasks = viewModel.tasks
  Scaffold(
      topBar = {
          TopAppBar(title = { Text("Task Manager") })
      },
      content = {
          TaskList(tasks)
      }
  )
}

TaskViewModel.kt

package com.example.cleanarchitecture.viewmodel

import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.example.cleanarchitecture.domain.Task
import com.example.cleanarchitecture.domain.TaskRepository
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import javax.inject.Inject

@HiltViewModel
class TaskViewModel @Inject constructor(
  private val repository: TaskRepository
) : ViewModel() {
  val tasks = repository.getTasks()

  fun addTask(task: Task) {
      viewModelScope.launch {
          repository.addTask(task)
      }
  }
}

TaskRepository.kt

package com.example.cleanarchitecture.domain

import kotlinx.coroutines.flow.Flow

interface TaskRepository {
  fun getTasks(): Flow<List<Task>>
  suspend fun addTask(task: Task)
}

Task.kt

package com.example.cleanarchitecture.domain

data class Task(
  val id: Int,
  val title: String,
  val description: String
)

image

A aplicação da arquitetura limpa em projetos Android utilizando Kotlin, Jetpack Compose, Gradle e Hilt proporciona uma estrutura robusta e escalável, facilitando a manutenção e a evolução do software. A separação clara de responsabilidades e a independência de frameworks são benefícios significativos dessa abordagem.

Share
Comments (0)