Basit MVVM — Swift
MVVM, projelerimizi geliştirirken bize kolaylık sağlaması amacıyla kullanılan mimarilerden biridir. Açılımı “Model — View — ViewModel” olup bu 3 kavramı teknik, uzun ve sıkıcı bir şekilde anlatmak istemiyorum. Merak edenler bu bilgilere diğer birçok kaynaktan ulaşabilir. Çünkü bu yazıda başlıktan da anlaşılacağı üzere basit bir şekilde bu olayı anlatmaya çalışacağım.
Ayrıca, her projenin bir mimariye ihtiyacı var mıdır? Her projenin MVVM kullanmaya ihtiyacı var mıdır? Bunlar tartışılacak konular ama bence iki sorunun cevabı da “Hayır”. Çünkü gereğinde fazla vakit alabilir, bu durum hiç istediğimiz bir durum değildir.
Ufak bir demo üzerinden anlatacağım. Herkesin kullandığı klasik bir demo olmasını istemediğim için bir farklılık yaparak meyvelerden oluşan bir tableview kullanacağım. Evet farklılık olsun diye :)
Model -> “Fruit”
Öncelikle modelimi oluşturuyorum. Meyve adı, açıklaması ve fiyatının bulunduğu basit bir model.
ViewModel -> “FruitViewModel”
Şimdi MVVM’in asıl önemli noktası olan ViewModel i oluşturacağım. Burada şöyle bir konuya dikkat çekmek istiyorum, MVVM belli kurallar üzerine kurulmuş olsa da çok fazla konfigürasyon barındırabiliyor. Şimdilik ben en basit şekliyle oluşturacağım. İlerleyen yazılarda içerisine Alamofire ile API bağlantıları sonrasında ise RxSwift ve RxCocoa kullanımlarıyla da pekiştirmeye çalışacağım.
Verileri bilerek servisten almadım çünkü bir sonraki yazımda Alamofire ile bu konuya değineceğim ve bu proje üzerinden devam etmeyi düşünüyorum.
Tüm yazılım mimarilerinin kullanım amacının kodu okunabilir kılmak, üzerinde değişiklik yapılmasını daha kolay hale getirmek gibi yazılımcı odaklı faydalar sağladığını düşünürsek MVVM’in de genel amacı tam olarak budur. Bu mimariyi tercih eden yazılımcılar diğer mimarilere göre daha kolay test yazılabildiği için tercih ettiklerini söylerler. Test yazma konusuna da ilerleyen yazılarda değineceğim.
View -> “UIViewController”
Şimdi ViewController’ı MVVM mimarisine göre View olarak kullanıyoruz ve içerisinde sadece TableView olan bir ViewController’ım var. Burada ViewController içinde hiç servis bağlantısı yapmadan ve Model ile karşılaşmadan TableView’i nasıl doldurduğumuzu göreceğiz.
Son olarak CustomTableViewCell sınıfımızda neler olup bittiğine bakalım ve demomuzun çıktısını görelim.
Şimdi ise kimsenin daha önce yapmadığı, dünyada eşi benzeri olmayan, harikulade eşsiz demomuzun çıktısını görelim.
Sonuç olarak, Basitçe MVVM bize ViewController içerisinde karışıklığı azaltmak adına yaptığımız Model ve Servis işlemlerinin ayrılmasının yanı sıra ViewModel dosyamızda bu işlemleri birleştirerek daha kolay hale getirmemizi sağladı. Başta da söylediğim üzere bir çok farklı konfigürasyonu bulunuyor, ihtiyaca göre eklemeler ve çıkarmalar yapmakta hiçbir sakınca yok, ama ben böyle tercih ediyorum :)
Keyifli okumalar…