Como é implementada a arquitetura VVM no seu projeto?
sobes.tech IA
Resposta da IA
No projeto foi utilizado MVVM.
Componentes:
-
Modelo: Representa os dados e a lógica de negócio. São estruturas ou classes independentes da UI.
-
View: Responsável por exibir os dados e lidar com a entrada do usuário. É
UIViewouUIViewController. A View é passiva, ela apenas exibe o que o ViewModel lhe diz. -
ViewModel: Atua como intermediário entre o Modelo e a View. Contém a lógica de apresentação e transforma os dados do Modelo em um formato adequado para a exibição na View. O ViewModel fornece propriedades observáveis às quais a View se inscreve. O ViewModel não possui uma referência direta à View.
Interação:
- A View assina as propriedades observáveis do ViewModel.
- O ViewModel obtém dados do Modelo (se necessário).
- O ViewModel processa os dados e atualiza suas propriedades observáveis.
- A View recebe a notificação de mudanças e atualiza sua interface.
- A View envia ações do usuário (por exemplo, clique de botão) ao ViewModel via closures ou delegados.
- O ViewModel processa essas ações, pode interagir com o Modelo e, se necessário, atualizar suas propriedades observáveis.
Binding (Vinculação):
Foi utilizado ReactiveSwift (ou Combine, dependendo da versão do iOS) para implementar a vinculação reativa entre a View e o ViewModel. Isso garante uma atualização automática da UI ao alterar os dados no ViewModel.
// Exemplo no ViewModel
let title: Property<String>
private let mutableTitle: MutableProperty<String>
init(...) {
self.mutableTitle = MutableProperty("")
self.title = Property(mutableTitle)
// ...
}
func loadData() {
// ...
mutableTitle.value = loadedData.title
// ...
}
// Exemplo na View/ViewController
viewModel.title.signal.observeValues { [weak self] title in
self?.titleLabel.text = title
}
// Enviando ação do usuário
button.reactive.controlEvents(.touchUpInside).observeValues { [weak self] _ in
self?.viewModel.buttonTapped()
}
Vantagens:
- Melhor testabilidade do ViewModel.
- Separação de responsabilidades entre camadas.
- Código mais fácil de manter.
- Troca de UI mais fácil sem alterar a lógica de negócio.