MVVM nedir ? Objective-C ile Basit Kullanımı
Son zamanlarda sıkça duyduğumuz ve çalıştığımız projelerde de karşılaştığımız, Separation of Concerns ilkesine katkı sağlayan bir design pattern olan MVVM’den bahsetmek istiyorum.
MVVM, program mantığını ve arayüz kontrollerini ayırmak için yapılandırılmış bir tasarım modelidir.
MVVM Bileşenleri
View: View, ekranda kullanıcıyla köprü görevinde olan UI elemanlarını ve bu UI elemanlarıyla datanın kullanıcıya aktarıldığı kısımdır.
Model: Uygulamada gösterilecek datanın barındığı, ayrıca data validation gibi kontrollerden sorumlu entity classlarıdır.
ViewModel: ViewModel, View ve Model katmanları arasında bulunur. View ile Model’i birbirine bağlayan köprüdür. ViewModel, View hakkında hiç bir bilgiyi bilmesine gereksinim duymaz ve doğrudan erişimi yoktur.
MVVM’in Faydaları
Evet burada son satırına ulaşılamayan controller’lardan bahsediyorum :)
Girişte de bahsettiğim gibi, sorumlulukları ayrıştırarak birbirinden daha az bağımlı yapılar kurmak, arayüz ve business logic’ini bağımsız hale getirmek, projemizi daha kolay test edilebilir hale getirecektir. Gün geçtikçe eklenecek yeni özelliklerlede karmaşıklaşan sayfalarımızın bakımı, MVVM tasarımı sayesinde daha da sürdürülebilir olacaktır.
Basit bir şekilde Objective-C ile Kullanımı
Öncelikle model classımızı yazalım:
@interface Employee : NSObject-(instancetype)initWithFirstname:(NSString *)firstName lastName:(NSString *)lastName birthdate:(NSInteger )employeeID;@property (nonatomic, readonly) NSString *firstName;@property (nonatomic, readonly) NSString *lastName;@property (nonatomic, readonly) NSInteger employeeID;@end
Şimdi de data manipülasyonunu yapacağımız kısmı yani ViewModel classımıza bakalım:
@implementation EmployeeViewModel- (instancetype)initWithEmployee:(Employee *)employee {self = [super init];if (!self) return nil;//Burada istediğiniz manipülasyonu yapabilirsiniz. Örnek olarak ViewModel’a employee objesinin ismini tuttuğumuz bir string variable eklediğimizi düşünelim.self.employeeNameString = employee.firstName;return self;}@end
Son olarak business logic’i controllerdan kopardıktan sonra, data gösterimini controller’ımızın viewDidLoad methodunda yapabiliriz:
— (void)viewDidLoad {[super viewDidLoad];self.nameLabel.text = self.employeeViewModel.employeeNameString;}
MVVM Design Pattern’ını objective-c ile kullanmanın ne kadar kolay olduğunu göstermeye çalıştım. Tabi ki ViewModel, View ve Controller arasındaki geçişleri ve ilişkileri çeşitli delegation ve notification patternlarıyla daha da zenginleştirebiliriz fakat basit düzeyde aktarmak istedim. Bir sonraki yazımda bunlardan da bahsetmek isterim. Görüşmek üzere :)