Design-Muster für Apples Cocoa-Frameworks: MVC, MVP, Passive Ansicht ... Wohin steuert Apfel?

stimmen
12

den Grundstein für diese Frage zu legen, werde ich feststellen, dass ich meine Definitionen für MVC, MVP und Passive Ansicht aus der folgenden bin immer:

Model View Controller (MVC)
Model View Presenter (MVP)
Passive Ansicht (PV)

Apple hat immer gesagt, dass es das MVC-Entwurfsmuster verwendet, aber ich merkte, in OS X 10.5 haben wir NSViewController bekommen, KVO, Bindungen, usw., Objekte, die eher wie die Passive Ansicht Entwurfsmuster zu verhalten scheinen. Ist das, wo Apple will uns den Kopf? Ich mag meinen Code in eine Art und Weise planen, die so gut wie möglich mit Apples gewählten Design-Muster spielt, weshalb ich wissen will, wo Apple-geleitet wird. Hat jemand eine Ahnung?

Veröffentlicht am 09/12/2008 um 18:57
quelle vom benutzer
In anderen Sprachen...                            


6 antworten

stimmen
7

Jeder Code beliebiger Komplexität hat viele Orte, an denen verschiedene Muster gelten. MVC ist prominent in den Cocoa-Dokumente, weil sie die Beziehungen zwischen den Funktionscode (das Modell), UI-Code oder IB-Design (die Ansicht) und die Cocoa Dienste, die sie zusammenbinden (der Controller) erklärt. Das lohnt Schwerpunkt, vor allem in der Einführungs Dox, weil Sie ein wenig „Weckruf“ müssen aufhören zu denken Sie alles selbst zu schreiben, und darüber nachzudenken, wie Sie Ihre einzigartige Teile zu entwerfen, und vertrauen den Rahmen dessen zu tun Sanitär-Job.

Die Variantendefinitionen von MVC sind legendär, und es ist erwähnenswert, dass MVC ist nicht in dem kanonischen „Gang of Four“ Buch beschrieben: „Design Patterns“. Es lohnt sich auch zugeben, dass Cocoa „MVC“ -Modell nicht die gleiche wie die SmallTalk 80 MVC ist (das ist, wo die Terminologie stammt).

Es ist wahrscheinlich auch erwähnenswert, dass „GoF“ tatsächlich das Wort „Muster“ verwendet eine bestimmte Art von Dokumentation zu bezeichnen, nicht die abstrakte Art und Weise Code zu entwerfen, das Muster beschreibt. Es ist schade, dass diese Nutzung ist weitgehend verloren gegangen ist. Wenn wir alle das Wort, das so verstehen, dann könnte ich sagen, „es ist wirklich nützlich wäre, wenn jemand würde ein Muster für Cocoa MVC tatsächlich aufzuschreiben.“ Dann würden wir nicht alle so verwirrt sein!

Beantwortet am 10/12/2008 um 19:22
quelle vom benutzer

stimmen
4

Kakao wird basierend auf MVC (wie von Apple definiert es ), und war schon immer auf einen Trend von immer mehr für Sie tun. Hier ist , wie es derzeit ist.

  • View-Schicht: NSView, NSWindow, NSCell, deren Subklassen und CALayer
  • Controller-Schicht (seit 10.3): NSController und Unterklassen (überwiegend NSArrayController)
  • Modellschicht: Traditionell mussten Sie, dies zu tun ganz sich selbst, aber seit 10.4 können Sie in der Lage sein, Core Data zu nutzen.

Bindungen werden durch KVO (und KVC) mit Strom versorgt und sind der Klebstoff, der die drei Schichten zusammen zu binden. Sie binden die Ansichten an die Controller und die Controller zum Modell.

Beantwortet am 09/12/2008 um 23:41
quelle vom benutzer

stimmen
3

Ich würde nicht sagen, Cocoa das passive Ansicht Muster folgt, wie es dort beschrieben wird. Es ist zu sagen, dass der Controller macht die ganze Arbeit in der Ansicht, die Vorbereitung und Änderungsbenachrichtigungen zu senden. In Cocoa wird eine Ansicht Objekt reagiert typischerweise auf KVO Benachrichtigungen (durch Bindungen) aus dem Modell, aktualisieren Sie Daten aus dem Controller, der es gebunden ist, bereitet sie durch Datenformatierern oder Wert Transformatoren, und es schließlich auf dem Bildschirm angezeigt werden soll.

Cocoa folgt ziemlich gut MVC, obwohl in der Regel die ‚Controller‘ in Sicht Aspekt Controller und Modell - Controller aufgeteilt ist. Sie können mehr über das lesen hier . Wenn Sie konkrete Beispiele auf, wo Sie verwirrt sind, vielleicht kann ich weitere Einzelheiten über die Art und Weise bieten Cocoa Dinge tut.

Aus der gleichen Führung, dieser Abschnitt erläutert einige zusätzliche Design - Muster können Sie nützlich finden. Obwohl in meiner eigenen Erfahrung nach der Arbeit durch ein paar Projekte MVC in Cocoa ziemlich natürlich kommen neigt, würde ich nicht allzu besorgt darüber.

Beantwortet am 09/12/2008 um 19:13
quelle vom benutzer

stimmen
2

Die Apfel docs erklären eigentlich MVC besser als alles andere , was ich lesen. Grundsätzlich ist die Verwirrung zu MVC verwendet ist , weil es eine Verbindung Muster ist. Es besteht aus vielen Grundmuster. Obwohl MVC nicht in besprochen wurde , Design , Muster von der Viererbande , waren die Grundmuster.

Der Hauptunterschied ist meine Meinung nach, dass der Controller in der Apple-Welt ist ein Vermittler-Muster zusätzlich zu dem, was es normalerweise ist.

So im Gegensatz zu den traditionellen Ansatz Modelle in Apples Welt nicht benachrichtigt Ansichten ändern. Sie nicht benachrichtigen jemand in der Tat. Wenn Sie ein Modell ändern möchten, müssen Sie es über den Controller tun, dass jeder zu machen, ist über Änderungen benachrichtigt.

Ich denke, dieser Ansatz ist viel besser als die traditionelle. Es setzt keine Einschränkungen für die Modellobjekte. Sie müssen keine spezielle Schnittstelle implementieren. Sie müssen nur domänenspezifische Probleme zu lösen. So können Sie sehr leicht, sie in anderen Anwendungen wiederverwenden.

Es ist vor allem der Controller-Objekten, die in diesem Ansatz neu geschrieben werden müssen. Natürlich verändert Apple, dass mit Bindungen. Aber wenn Sie Bindungen nicht-Controller verwenden, dann ist anwendungsspezifisch.

Mit Apple MVC in C ++

Ich folgte tatsächlich Apples Design, wenn Anwendungen in C ++ Programmierung mit Qt. Ansichten sind QWidget ist. Ich habe alle Code, der mit dem Erscheinen in einer QWidget Unterklasse zu tun hat. Dann mache ich meinen Controller eine QObject Unterklasse und habe sie die Ansicht Objekte erstellen und verbinden Signale von dem QWidgets zu Schlitzen in meinen QObject-Controller. Meine Modellklasse ist eine reguläre Klasse, die die Business-Logik nichts von Qt erben und implementieren. Es wird von den Controllern Schlitze modifiziert.

Alternativ können die QWidgets außerhalb des Controllers erstellt werden, so können Sie den Controller für andere Arten von Ansichten wiederverwenden.

Nicht sicher, ob dies jemanden hilft, aber ich denke, es ist manchmal einfacher ist, zu denken, von Cocoa-Muster in Bezug auf C ++, weil wir Muster zu bekommen, erklären im Sinne einer statisch typisierten Sprache wie C ++ und Java verwendet werden.

Beantwortet am 08/03/2009 um 15:29
quelle vom benutzer

stimmen
2

Ich glaube nicht , dass Cocoa / Openstep jemals wirklich MVC gefolgt , wie es in beschrieben ist, zum Beispiel, SmallTalk 80 . Der SmallTalk Controller ist wirklich etwas , das für die Interpretation Interaktion des Benutzers mit der Ansicht, die im Fall von Cocoa verantwortlich ist , wird von NSControl behandelt und daher von der View - Schicht (vielleicht ist es auf diese Weise in dem Rahmen zerlegt, aber wir sind nicht anzunehmen Blick ins Innere, das ist , was Abstraktion ist alles über :-). In Bezug auf diese Links von Ihnen, hat die Controller - Schicht in Cocoa wirklich fällt unter dem Banner Presenter, vor allem , wenn die verschiedenen NS * Controller Klassen von Cocoa Bindungen berücksichtigen. Das ist wirklich ein Shuttle zwischen einer View - Schicht und Modell.

In meinen eigenen Anwendungen neige ich vier verschiedene Schichten haben, auch an Orten, wo sie nicht explizit getrennt sind; die Ansicht, Moderator, Service und Modell. Dann werden die „Presenter-Controller“ und „Service Controller“ haben völlig unterschiedliche Zwecke; die Logik und Prozesse sind in den Diensten und der Workflow und Anwendungsfälle sind in den View-Controller. In Bezug auf die Verpackung, wenn Sie in diese Art der Sache sind, stellen die Dienste und das Modell zusammen einen abstrakten „Dinge auf Dinge zu tun“, die kontextunabhängig sein kann. Die Moderatoren und Ansichten stellen die „und das ist, wie ein Benutzer eines Mac OS X-Anwendung, es benutzen möchte“, die auf das untere Paket abhängig ist, und kapselt AppKit spezifische (und AHIG spezifisch) Klassen und Verhalten.

Beantwortet am 09/12/2008 um 19:37
quelle vom benutzer

stimmen
1

Uh-oh. MVC = die meisten falsch zitiert Muster je. Ich habe mindestens 5 verschiedene Definitionen davon gelesen.

Sie können diesen Artikel nach lesen Martin Fowler

Beantwortet am 09/12/2008 um 19:46
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more