MVVM
K
www.kypselia.com
[CocoaHeads.fr]
par Karim-Pierre Maalej
Paris ∙ 12 mars 2015
MVC
MVC?
massive
view controller
MVC : une bonne idée,
à la base…
Model
Controller
View
En réalité…
Model
Controller
View
@interface	
@property	
@property	
@property	
@end	
!
@implementation	
@end
Et ça pose des problèmes
• Classes trop lourdes, trop complexes
• Code peu testable
• Difficile à maintenir
• Difficile de t...
Le Contrôleur en fait trop !
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é ...
Modèle de Vue
Model ViewModel View
Points forts
• Compatible avec MVC
• (ouf)
• Isolation entre les 3 couches
• le code est davantage réutilisable
• les test...
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 M...
Principes
Model ViewModel ViewViewController
device-specific
screen-specific
intention
sémantique de présentation
UI logic a...
Testable !
Model ViewModel Unit Test
device-specific
screen-specific
Exemple
Person
- firstName:
- lastName:
- gender:
- birthDate:
PersonViewController
- nameLabel:
- ageLabel:
nameLabel.text...
Exemple
Person
- firstName:
- lastName:
- gender:
- birthDate:
PersonViewModel
- nameString: String

- ageString: String
Pe...
Bindings
Model ViewModel ViewViewController
Bindings
Model ViewModel ViewViewController
delegate delegate
KVO KVO
ReactiveCocoa ReactiveCocoa
ou ou
ouou
QA&
K
www.kypselia.com
Prochain SlideShare
Chargement dans…5
×

MVVM par Karim PIerre Maalej

5 989 vues

Publié le

Model View ViewModel en pratique avec ses avantages/inconvénient.

Publié dans : Logiciels
0 commentaire
3 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
5 989
Sur SlideShare
0
Issues des intégrations
0
Intégrations
4 816
Actions
Partages
0
Téléchargements
13
Commentaires
0
J’aime
3
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

MVVM par Karim PIerre Maalej

  1. 1. MVVM K www.kypselia.com [CocoaHeads.fr] par Karim-Pierre Maalej Paris ∙ 12 mars 2015
  2. 2. MVC
  3. 3. MVC? massive view controller
  4. 4. MVC : une bonne idée, à la base… Model Controller View
  5. 5. En réalité… Model Controller View @interface @property @property @property @end ! @implementation @end
  6. 6. Et ça pose des problèmes • Classes trop lourdes, trop complexes • Code peu testable • Difficile à maintenir • Difficile de travailler à plusieurs
  7. 7. Le Contrôleur en fait trop !
  8. 8. 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 »
  9. 9. Modèle de Vue Model ViewModel View
  10. 10. 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
  11. 11. 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 UIViewController NSViewController UIView NSView
  12. 12. Principes Model ViewModel ViewViewController device-specific screen-specific intention sémantique de présentation UI logic and state décoration
  13. 13. Testable ! Model ViewModel Unit Test device-specific screen-specific
  14. 14. 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)
  15. 15. 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
  16. 16. Bindings Model ViewModel ViewViewController
  17. 17. Bindings Model ViewModel ViewViewController delegate delegate KVO KVO ReactiveCocoa ReactiveCocoa ou ou ouou
  18. 18. QA& K www.kypselia.com

×