Projenizde VVM mimarisi nasıl uygulanmıştır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Projede MVVM kullanılmıştır.
Bileşenler:
-
Model: Verileri ve iş mantığını temsil eder. UI'den bağımsız yapılar veya sınıflardır.
-
View: Verilerin görüntülenmesinden ve kullanıcı girişlerinin işlenmesinden sorumludur.
UIViewveyaUIViewController'dır. View pasiftir, sadece ViewModel'in ona söylediği şeyi gösterir. -
ViewModel: Model ile View arasında aracı görevi görür. Sunum mantığını içerir ve Model'den gelen verileri View'de gösterilecek biçime dönüştürür. ViewModel, gözlemlenebilir özellikler sağlar ve View bunlara abone olur. ViewModel'in View ile doğrudan bir referansı yoktur.
Etkileşim:
- View, ViewModel'in gözlemlenebilir özelliklerine abone olur.
- ViewModel, gerekirse Model'den veri alır.
- ViewModel, verileri işler ve gözlemlenebilir özelliklerini günceller.
- View, değişiklikleri alır ve arayüzünü günceller.
- View, kullanıcı eylemlerini (örneğin, buton tıklaması) closure veya delegeler aracılığıyla ViewModel'e iletir.
- ViewModel, bu eylemleri işler, Model ile etkileşime geçebilir ve gerekirse gözlemlenebilir özellikleri günceller.
Binding (Bağlama):
View ve ViewModel arasında reaktif bağlamayı uygulamak için ReactiveSwift (veya iOS sürümüne bağlı olarak Combine) kullanılmıştır. Bu, ViewModel'deki verilerdeki değişiklikler olduğunda UI'nin otomatik olarak güncellenmesini sağlar.
// ViewModel'de örnek
let title: Property<String>
private let mutableTitle: MutableProperty<String>
init(...) {
self.mutableTitle = MutableProperty("")
self.title = Property(mutableTitle)
// ...
}
func loadData() {
// ...
mutableTitle.value = loadedData.title
// ...
}
// View/ViewController'da örnek
viewModel.title.signal.observeValues { [weak self] title in
self?.titleLabel.text = title
}
// Kullanıcı eylemini gönderme
button.reactive.controlEvents(.touchUpInside).observeValues { [weak self] _ in
self?.viewModel.buttonTapped()
}
Avantajlar:
- ViewModel'in test edilebilirliği artar.
- Katmanlar arasında sorumlulukların ayrılması.
- Kodun bakımının kolaylaşması.
- İş mantığını değiştirmeden UI değişikliği daha kolaydır.