Upgrade to Pro — share decks privately, control downloads, hide ads and more …

M-V-VM. Basics.

DAloG
June 27, 2014

M-V-VM. Basics.

In this slides (EN, and RU texts) i will try to explain basics of MVVM pattern.

DAloG

June 27, 2014
Tweet

More Decks by DAloG

Other Decks in Programming

Transcript

  1. История • Паттерн не формализован • Мартин фаулер публикует статью

    • Microsoft делает WPF • ReactiveCocoa (Rx) начинает продвижение • objc.io доносит идею в массы.
  2. Мода • Binding - это удобно • RAC - это

    модно • TDD - это полезно • … • PROFIT!!!
  3. Content Content Content Content Content Content Content Content Content Content

    Content Content Content Content Content Content Content
  4. @interface XXUserCredentialsViewModel: NSObject ! ! /// Динамическое состояние интерфейса! @property

    (readonly) NSString* name;! @property (readonly) NSString* password;! @property (readonly) BOOL canLogin;! ! /// Прием информации от интерфейса! - (void) setName:(NSString*) name;! - (void) setPassword:(NSString*) password;! - (void) loginUser;! ! /// Связь с иерархией ViewModel’ей! @property (readonly) XXTimelineViewModel* timeline;! ! @end
  5. @interface XXUserCredentialsViewModel: NSObject ! ! /// Динамическое состояние интерфейса! @property

    (readonly) NSString* name;! @property (readonly) NSString* password;! @property (readonly) BOOL canLogin;! ! /// Прием информации от интерфейса! - (void) setName:(NSString*) name;! - (void) setPassword:(NSString*) password;! - (void) loginUser;! ! /// Связь с иерархией ViewModel’ей! @property (readonly) XXTimelineViewModel* timeline;! ! @end
  6. @interface XXUserCredentialsViewModel: NSObject ! ! /// Динамическое состояние интерфейса! @property

    (readonly) NSString* name;! @property (readonly) NSString* password;! @property (readonly) BOOL canLogin;! ! /// Прием информации от интерфейса! - (void) setName:(NSString*) name;! - (void) setPassword:(NSString*) password;! - (void) loginUser;! ! /// Связь с иерархией ViewModel’ей! @property (readonly) XXTimelineViewModel* timeline;! ! @end
  7. @interface XXUserCredentialsViewModel: NSObject ! ! /// Динамическое состояние интерфейса! @property

    (readonly) NSString* name;! @property (readonly) NSString* password;! @property (readonly) BOOL canLogin;! ! /// Прием информации от интерфейса! - (void) setName:(NSString*) name;! - (void) setPassword:(NSString*) password;! - (void) loginUser;! ! /// Связь с иерархией ViewModel’ей! @property (readonly) XXTimelineViewModel* timeline;! ! @end
  8. @interface XXUserCredentialsViewModel: NSObject ! ! /// Динамическое состояние интерфейса! @property

    (readonly) NSString* name;! @property (readonly) NSString* password;! @property (readonly) BOOL canLogin;! ! /// Прием информации от интерфейса! - (void) setName:(NSString*) name;! - (void) setPassword:(NSString*) password;! - (void) loginUser;! ! /// Связь с иерархией ViewModel’ей! @property (readonly) XXTimelineViewModel* timeline;! ! @end
  9. @interface XXUserCredentialsViewModel: NSObject ! ! …! - (void) loginUser;! !

    @property (readonly) XXLoginProcessViewModel* ! ! ! ! ! ! ! ! ! loginProcess;! …! ! @end
  10. Закон восходящих абстракций @model; @viewModel; • Любая абстракция не имеет

    доступа к более конкретным сущностям. • IoC используется для прохождения через этот барьер, и только для этого.
  11. Альтернативы • As Is • Fat Data Source - apple

    way. http://oleb.net/ blog/2014/06/apples-take-on-app-architecture/ • Active Model - [self.ui …]. http://www.objc.io/ issue-13/viper.html
  12. Дополнительные материалы • MSDN (WPF) • ReactiveViewModel - RAC connected.

    • Clean architecture - http://blog.8thlight.com/ uncle-bob/2012/08/13/the-clean-architecture.html • Presentation Model - http://martinfowler.com/ eaaDev/PresentationModel.html • objc.io - http://www.objc.io/issue-13/mvvm.html