統計情報(30日間)


最新情報をツイート

人気の投稿

MVVM

このエントリーをはてなブックマークに追加

MVVM = Model-View-ViewModel パターンの紹介。モデルの表示用変換(フォーマット)を ControllerやModelではなく専用のViewModelで行う例が紹介されている。



イメージ


メリットは
・ViewController のコードを減らせる
・テストがし易い


例えばモデルのフォーマットのありがちな例として ViewControllerにコードが記述されている。
- (void)viewDidLoad {
    [super viewDidLoad];
    
    if (self.model.salutation.length > 0) {
        self.nameLabel.text = [NSString stringWithFormat:@"%@ %@ %@", self.model.salutation, self.model.firstName, self.model.lastName];
    } else {
        self.nameLabel.text = [NSString stringWithFormat:@"%@ %@", self.model.firstName, self.model.lastName];
    }
    
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"EEEE MMMM d, yyyy"];
    self.birthdateLabel.text = [dateFormatter stringFromDate:model.birthdate];
}

そこでViewModelなクラスを一つ用意してその中にフォーマットコードを入れてしまう。
@interface PersonViewModel : NSObject

- (instancetype)initWithPerson:(Person *)person;

@property (nonatomic, readonly) Person *person;

@property (nonatomic, readonly) NSString *nameText;
@property (nonatomic, readonly) NSString *birthdateText;

@end

すると ViewControllerがすっきり。
- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.nameLabel.text = self.viewModel.nameText;
    self.birthdateLabel.text = self.viewModel.birthdateText;
}

フォーマットのロジックがViewControllerから離れるのでそこのテストコードも書きやすい、とのこと。

- - - -
悪くないと思うがObjective-Cの場合クラスファイル(.h/.m)が増えていくのが難点で、フォーマッタはついついモデルとかに書いてしまう。
Swiftになるとヘッダファイルが無くなってファイル数が半減するのでいいかもしれない。


One Response to MVVM

  1. 匿名 says:

    LLVMのライバルかと思ったら違った。

Leave a Reply