MVVM par Karim PIerre Maalej

18
MVVM K www.kypselia.com [CocoaHeads.fr ] par Karim-Pierre Maalej Paris 12 mars 2015

Transcript of MVVM par Karim PIerre Maalej

Page 1: MVVM par Karim PIerre Maalej

MVVM

K

www.kypselia.com

[CocoaHeads.fr]

par Karim-Pierre Maalej

Paris ∙ 12 mars 2015

Page 2: MVVM par Karim PIerre Maalej

MVC

Page 3: MVVM par Karim PIerre Maalej

MVC?

massiveview controller

Page 4: MVVM par Karim PIerre Maalej

MVC : une bonne idée, à la base…

Model

Controller

View

Page 5: MVVM par Karim PIerre Maalej

En réalité…

Model

Controller

View@interface@property@property@property@end!@implementation@end

Page 6: MVVM par Karim PIerre Maalej

Et ça pose des problèmes

• Classes trop lourdes, trop complexes

• Code peu testable

• Difficile à maintenir

• Difficile de travailler à plusieurs

Page 7: MVVM par Karim PIerre Maalej

Le Contrôleur en fait trop !

Page 8: MVVM par Karim PIerre Maalej

Le Contrôleur en fait trop

• Il devrait se limiter à ce que son nom suggère : contrôler la Vue

• Le reste doit être placé ailleurs

• la logique métier doit retourner dans le Modèle

• la préparation des données à afficher doit avoir lieu dans une autre classe : le « Modèle de Vue »

Page 9: MVVM par Karim PIerre Maalej

Modèle de Vue

Model ViewModel View

Page 10: MVVM par Karim PIerre Maalej

Points forts

• Compatible avec MVC

• (ouf)

• Isolation entre les 3 couches

• le code est davantage réutilisable

• les tests unitaires sont plus fiables

• Code plus propre, plus clair

• Excelle avec un mécanisme de binding

Page 11: MVVM par Karim PIerre Maalej

Principes• Le Modèle se concentre sur le métier, et ne connaît

personne d’autre

• Le Modèle de Vue connaît seulement le Modèle, il règle ses propriétés et les écoute

• Le Contrôleur fait simplement le lien entre le Modèle de Vue et la Vue, il ne connaît pas le Modèle

Model ViewModel ViewViewController

NSObject NSObject UIViewControllerNSViewController

UIViewNSView

Page 12: MVVM par Karim PIerre Maalej

Principes

Model ViewModel ViewViewControllerdevice-specific

screen-specific

intention

sémantique de présentation UI logic and state

décoration

Page 13: MVVM par Karim PIerre Maalej

Testable !

Model ViewModel Unit Testdevice-specific

screen-specific

Page 14: MVVM par Karim PIerre Maalej

Exemple

Person

- firstName: - lastName: - gender: - birthDate:

PersonViewController

- nameLabel: - ageLabel:

nameLabel.text = person.gender ? “M. ”:“Mme ” + person.firstName + “ ” + person.lastName ageLabel.text = NSDate.date().yearsFrom(person.birthDate)

Page 15: MVVM par Karim PIerre Maalej

Exemple

Person

- firstName: - lastName: - gender: - birthDate:

PersonViewModel

- nameString: String- ageString: String

PersonViewController

- nameLabel: - ageLabel:

nameString = person.gender ? “M. ”:“Mme ” + person.firstName + “ ” + person.lastName ageString = NSDate.date().yearsFrom(person.birthDate)

nameLabel.text = viewModel.nameString ageLabel.text = viewModel.ageString

Page 16: MVVM par Karim PIerre Maalej

Bindings

Model ViewModel ViewViewController

Page 17: MVVM par Karim PIerre Maalej

Bindings

Model ViewModel ViewViewController

delegate delegate

KVO KVO

ReactiveCocoa ReactiveCocoa

ou ou

ouou

Page 18: MVVM par Karim PIerre Maalej

QA&

K

www.kypselia.com