Ich habe vor kurzem beschlossen, iOS-Entwicklung zu lernen, und zu diesem Zweck habe ich iOS-Programmierung gelesen : The Big Nerd Ranch Guide . In dem Buch beschreiben die Autoren ein Entwurfsmuster MVCS - Model-View-Controller-Store , wobei die Grundidee darin besteht, dass viele Anwendungen mehrere externe Datenquellen verwenden, um die Anforderungslogik im Controller beizubehalten schlagen vor, dass die gesamte Anforderungslogik aus der Steuerung in ein separates Objekt verschoben wird.
Kurz, um das Buch zu zitieren
Model-View-Controller-Store fügt die Anforderungslogik in ein separates Objekt ein und nennt dieses Objekt einen Store (Abbildung 28.4). Die Verwendung eines Geschäftsobjekts minimiert redundanten Code und vereinfacht den Code, der Daten abruft und speichert. Am wichtigsten ist, dass die Logik für den Umgang mit einer externen Quelle in eine ordentliche Klasse mit einem klaren und fokussierten Ziel überführt wird. Dies erleichtert das Verständnis des Codes, was die Wartung und das Debuggen sowie den Austausch mit anderen Programmierern in Ihrem Team erleichtert.
Und
Das Coole an asynchronen Speichern ist, dass sich der Fluss der Anforderung und ihre Antwort an einer Stelle im Controller befinden, obwohl viele Objekte viel Arbeit für die Verarbeitung einer Anforderung leisten. Dies gibt uns den Vorteil von Code, der leicht zu lesen und auch leicht zu ändern ist.
Ich wollte mehr über dieses Muster herausfinden und sehen, was andere dazu sagen könnten, aber während ich online suchte, konnte ich nur Hinweise auf dasselbe Buch finden (ist das Muster vielleicht unter einem anderen Namen bekannt?).
Für mich scheint die Logik des Autors sinnvoll zu sein und sie scheint eine logische Erweiterung des regulären MVC-Musters zu sein, aber vielleicht liegt das daran, dass ich nicht wirklich viel Erfahrung mit dem MVC-Muster in der Praxis habe (abgesehen von meinem Einstieg in die iOS-Entwicklung) Art von verwendetem MVV mit backbone.js (das heißt, wenn Sie es als MVC betrachten ).
Ich hatte gehofft, dass vielleicht jemand mit mehr Erfahrung ein bisschen Licht ins Dunkel bringen kann, ob es offensichtliche Fehler / Probleme mit dem MVCS- Muster gibt, die mir fehlen.
quelle
Antworten:
Bei MVCS-Entwurfsmustern tendiert "Speichern" zur Speicherlogik. Im Falle von iOS ist dies normalerweise eine Core Data-Implementierung. Wenn Sie eine Core Data-backed-Vorlage in Xcode erstellen, sehen Sie den "Store" -Aspekt dieses Entwurfsmusters in der AppDelegate-Klasse.
Um dies auf die nächste Ebene zu heben, erstelle ich häufig eine Singleton-Manager-Klasse, die das Einrichten des Core Data-Stacks und das gesamte Abrufen / Speichern des Stacks übernimmt. Wie Sie bereits erwähnt haben, ist es damit sehr einfach, diese Methoden nicht nur aufzurufen, sondern bei Bedarf anzupassen, anstatt Aufrufe überall in verschiedenen View-Controllern zu speichern / abzurufen.
Das "Store" -Paradigma ist jedoch nicht auf Core Data beschränkt. Ihr Geschäft ist möglicherweise nur ein Webdienst. Vielleicht haben Sie eine Klasse, die mit Facebook, Twitter, Yelp oder einer anderen REST-basierten API interagiert. Ich habe festgestellt (und folge ebenfalls dem Trend), dass solche Klassen auch als Manager bezeichnet werden. Sie verwalten buchstäblich alle internen Details, sodass Ihre anderen Klassen genau das eingeben oder herausholen können, was sie benötigen.
Soweit offensichtliche Mängel oder Probleme mit diesem Entwurfsmuster ... Wie bei jedem Entwurfsmuster besteht das auffälligste Problem darin, sicherzustellen, dass Sie Ihr Projekt so eingerichtet haben, dass es dem Paradigma entspricht. Besonders bei einem Designmuster, das Ihnen neu ist, kann dies manchmal der schwierigste Teil sein. Der Vorteil des Aufteilens Ihrer "Store" -Logik in eine eigene Klasse liegt in der Tatsache, dass die Code-Wartbarkeit erheblich vereinfacht wird.
quelle
"Speichern" klingt in diesem Zusammenhang sehr nach einem Repository oder Service . In diesem Fall ist dies ein äußerst verbreitetes Muster. Die Fehler / Probleme hängen von Ihrer Implementierung und der Problemdomäne ab.
Auf einer allgemeinen Ebene klingt es so, als würde das Buch "Speichern" verwenden, um eine Ebene der Geschäftslogik + eine Ebene der Datenabruflogik darzustellen, die einen Satz von Daten verarbeitet, die möglicherweise Teil Ihrer Anwendung sind oder nicht.
Zum Beispiel ist das Einhüllen der Twitter-API in einen "Store" eine gute Möglichkeit, diese Logik zu unterteilen.
Bei der weiteren Gedanken
Verwendung dieser Definition von MVC (von der ich denke, dass sie genau richtig ist) ist der Store wirklich eine Teilmenge des Modells. Die Abgrenzung, ob es sich um eine Erweiterung von MVC oder um ein Datenabrufmuster handelt, ist nicht besonders nützlich. Sie sehen am Ende aus wie derselbe Code.
Fazit: Ich denke, Sie werden dem Rat, den sie vorschlagen, in Ordnung sein (scheint insgesamt solide zu sein).
quelle