web-dev-qa-db-fra.com

MVCS - Model View Controller Store

J'ai récemment décidé de commencer à apprendre le développement iOS, et à cette fin, j'ai lu Programmation iOS: The Big Nerd Ranch Guide . Dans le livre, les auteurs décrivent un modèle de conception MVCS - Model-View-Controller-Store , l'idée de base étant que, puisque de nombreuses applications utilisent plusieurs externes les sources de données conservant la logique de demande dans le contrôleur peuvent devenir très compliquées, mais les auteurs proposent plutôt de déplacer toute la logique de demande hors du contrôleur et dans un objet séparé.

Bref pour citer le livre

Model-View-Controller-Store place la logique de demande dans un objet séparé, et nous appelons cet objet un magasin (Figure 28.4). L'utilisation d'un objet de magasin minimise le code redondant et simplifie le code qui récupère et enregistre les données. Plus important encore, il déplace la logique pour traiter avec une source externe dans une classe bien rangée avec un objectif clair et ciblé. Cela rend le code plus facile à comprendre, ce qui facilite la maintenance et le débogage, ainsi que le partage avec d'autres programmeurs de votre équipe.

Et

Ce qui est cool avec les magasins asynchrones, c'est que même si beaucoup d'objets font beaucoup de travail pour traiter une demande, le flux de la demande et sa réponse sont au même endroit dans le contrôleur. Cela nous donne l'avantage d'un code facile à lire et aussi facile à modifier.

Je voulais en savoir plus sur ce modèle et voir ce que d'autres pourraient en dire, mais lors de la recherche en ligne, les seules références que j'ai pu trouver étaient pour ce même livre (le modèle est-il peut-être connu sous un autre nom?).

Pour moi, la logique de l'auteur semble avoir du sens, et cela semble être une extension logique du modèle MVC normal, mais c'est peut-être parce que je n'ai pas vraiment beaucoup d'expérience avec le modèle MVC dans la pratique (à part l'incursion dans le développement iOS, j'ai sorte de MVV utilisé avec backbone.js (c'est-à-dire si vous le considérez MVC )).

J'espérais que quelqu'un avec plus d'expérience pourrait éclairer s'il y avait des défauts/problèmes évidents avec les [~ # ~] mvcs [~ # ~] motif qui me manque.

36
Jack

"Store", dans le cas des modèles de conception MVCS, tend à tendre vers la logique de stockage. Dans le cas d'iOS, il s'agit généralement d'une implémentation Core Data. Si vous créez un modèle basé sur Core Data dans Xcode, vous verrez l'aspect "Store" de ce modèle de conception caché dans la classe AppDelegate.

Pour passer au niveau suivant, je vais souvent créer une classe de gestionnaire singleton qui gère la configuration de la pile de données de base et traite de toutes les opérations de récupération/enregistrement impliquées avec la pile. Comme le dit la citation que vous avez mentionnée, cela rend très facile non seulement d'appeler ces méthodes, mais de les ajuster si nécessaire, au lieu d'avoir des appels de sauvegarde/récupération partout dans différents contrôleurs de vue.

Le paradigme "Store" n'est cependant pas limité aux Core Data. Votre magasin n'est peut-être qu'un service Web. Vous avez peut-être une classe qui interagit avec Facebook, Twitter, Yelp ou une autre API basée sur REST. J'ai trouvé (et suivez la tendance de la même manière) que ces types de classes sont également nommés Manager. Ils gèrent littéralement tous les détails internes afin que vos autres classes puissent simplement entrer ou sortir exactement ce dont elles ont besoin.

En ce qui concerne les défauts ou problèmes évidents avec ce modèle de conception ... Comme avec tout modèle de conception, le problème le plus flagrant est de s'assurer que vous avez configuré votre projet de manière à ce qu'il corresponde au paradigme. Surtout avec un modèle de conception qui est nouveau pour vous, cela peut parfois être la partie la plus difficile. L'avantage de briser votre logique "Store" dans sa propre classe est le fait même que cela rend la maintenabilité du code beaucoup plus facile.

18
jmstone

Dans ce contexte, "stocker" ressemble beaucoup à un service de référentiel ou . Dans ce cas, il s'agit d'un schéma extrêmement courant. Les défauts/problèmes varieront selon votre implémentation et le domaine du problème.

De manière générale, il semble que le livre utilise `` Store '' pour représenter un niveau de logique métier + un niveau de logique de récupération de données qui gère un ensemble de données qui peuvent ou non faire partie de votre application.

Par exemple, encapsuler l'API Twitter dans un 'Store' est une belle façon de compartimenter cette logique.

Après réflexion
En utilisant cette définition de MVC (qui je pense est assez juste), le 'Store' est vraiment un sous-ensemble du modèle. La délimitation entre s'il s'agit d'une extension de MVC ou s'il s'agit d'un modèle de récupération de données n'est pas très utile. Ils finissent par ressembler au même code.

En bout de ligne, je pense que vous serez bien en suivant les conseils qu'ils suggèrent (semble solide dans l'ensemble).

18
Zachary Yates