web-dev-qa-db-fra.com

Exemple MVVM / exemple d'implémentation dans iOS

Est-ce que quelqu'un a implémenté le modèle MVVM dans votre application iOS sans utiliser ReactiveCocoa?

J'ai trouvé de nombreux exemples ici, mais tous utilisent du cacao réactif. Je voulais un exemple simple d'implémentation MVVM.

36
Smitha

Le cacao réactif n'est certainement pas requis pour MVVM. J'ai construit un framework MVVM très réussi sans aucune liaison. Les liaisons ne sont pas obligatoires pour MVVM.

Plus précisément, la liaison entre le modèle de vue et la vue nécessite que le modèle de vue signale à la vue qu'il doit mettre à jour ses données. Cela peut être réalisé en utilisant Reactive Cocoa, KVO (j'aime vraiment le KVOController de Facebook), ou même en utilisant un modèle de délégué simple.

Le modèle de vue sait quand la vue doit être mise à jour - soit les données ont changé, soit vous faites une demande de données asynchrones via le modèle et le modèle a été chargé dans le modèle de vue.

Lorsque vous configurez votre vue, vous pouvez lier chaque contrôle à la valeur correspondante sur le modèle de vue. J'ai constaté que lorsque je dois sortir des écrans, cela peut devenir très fastidieux. Au lieu de cela, je préfère avoir une seule méthode qui est appelée lorsque le modèle de vue signale que la vue doit se mettre à jour. Dans cette méthode, je vais simplement définir toutes mes propriétés de contrôle.

Maintenant, il vous suffit de vous préoccuper de la façon dont cette méthode est déclenchée. Dans mon cadre personnel, j'utilise KVO et mes ViewControllers surveillent une propriété d'horodatage sur ma classe de base ViewModel. Chaque fois que mes modèles de vue mettent à jour leurs données sous-jacentes, son horodatage est mis à jour, ce qui déclenche la mise à jour. Vous pouvez tout aussi facilement faire en sorte que View Controller s'enregistre en tant que délégué de mise à jour de ViewModel et utilise un modèle de délégué standard.

Encore une fois, MVVM ne concerne pas des exigences d'implémentation spécifiques, mais plutôt un concept de niveau supérieur de séparation des préoccupations, de découplage des dépendances et d'encapsulation.

43
Drew Beaupre