Swift — Bağımsız Custom View MVVM Çözümü

Umut Boz
KoçSistem
Published in
2 min readJul 30, 2019

MVVM mimari deseni ile veri modelimize ait bind işlemlerini, arayüz yapılandırmaları gibi birbirinden bağımsız bir çok kod parçasını mümkün olduğunca ViewController üzerinden ayrıştırmak istiyoruz. Böylelikle sade ve anlaşılır logic kod parçalarından oluşan ViewController’ımız olabilir. Bu yazıda MVVM mimari deseni uygularken ViewController içerisinde ki bağımsız iş birimlerine sahip view’larımızı bağımsız olarak nasıl yönetileceğini açıklamaya çalışacağım.

Tabii bir MVVM mimari tasarım deseni (Architecture Design Pattern) kullanacak isek; ViewController’ı çöpe atacak değiliz. Doğal iOS geliştirme ortamımız için lifecycle’ı ile birlikte View üzerinde gerçekleşecek tüm logic iş süreçlerini yöneteceğimiz bir birimdir, ViewController. Farklı iş akışlarının ayrı ayrı geçekleşeceği içerikleri farklı View’lar üzerinde konumlandırırız. Öte yandan bu View’larımızı ViewController’dan bağımsız çalışacak şekilde ayırabiliriz. Böylelikle kendi sürecinde işleyen ViewController’dan bağımsız istediğimiz ViewController’lara kolayca referans verebileceğimiz iş parçasına sahip View’larımız olabilir. 🧐

View’ları XIB olarak parçalayacağız ve bu View’lara ait UIView subclass’a sahip içeriklerimiz olacak. ViewController’ımız ise bütün bu işlerden ViewModel isterse haberdar olacak. Hedeflediğimiz sonuç ise aşağıdaki gibi olacaktır.

Separation of concerns with

Aslında yukarıdaki örneklendirilmiş ViewController’a ait bir container view bulunmaktadır.

Sample Seperated View

Görselde bulunan View’ı yöneten ve bu View’da gerçekleşen tüm data binding işlemlerini yöneten ViewModel’ımız da mevcut. Bu ViewModel ile ViewController’dan talep etmiş olduğumuz container view üzerine bağımsız çalışan View’ımızı yerleştirmekteyiz.

Ve bu View’ı alalım başka bir ViewController’a yerleştirelim bu süreçte bizi bağımlı yapan hiç bir logic bulunmamaktadır. Kaldı ki başka iş süreçlerinin gerçekleştiği View’ı yöneten ViewModel’ı alıp aynı ViewController üzerinde farklı bir konumda kullanıcıya sunabiliriz. 🇹🇷™️®️

MVVM felsefesi der ki: Bir View için bir ViewModel mutlaka olmalıdır fakat bir ViewModel’ın kullandığı birden fazla View olabilir.

Bu çözüm için özel olarak tasarladığım View ve ViewModel yapılarını paylaşarak konumuzu tamamlayalım.

MVVM tasarımımız içinde View’larımız için kullanacağımız base View yapısı :

MVVM base View

ve base ViewModel :

MVVM base ViewModel

Yukarıda örneklendirdiğim MVVM için şablon olarak kullanabileceğiniz bu yapıları View ve ViewModel’larınız üzerinde uyguladığınız durumda ViewController’larınızda bağımsız iş süreçlerine sahip olabilirsiniz. 🎁

Bir sonraki yazımda bu süreç üzerinden RXSwift’i de dahil ettiğimiz databinding işlemleri ile devam edebiliriz.

Farklı teknolojilerde, konularda, yazılarda buluşmak üzere..ツ

--

--