MVVM nedir ? Objective-C ile Basit Kullanımı

onur calıskan
Ekmob Developer Studio
2 min readJan 28, 2020

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 :)

--

--