Frage

Nehmen wir an, ich habe eine Ansicht, MyView, einen Ansichtscontroller, MyViewController und eine Art Modellobjekt, MyModel. Nehmen wir an, das Modell hat zwei kVO -konforme Eigenschaften. arrayOfPeopleNames und arrayOfAnimalKinds (beide nsstrings).

Meiner Ansicht nach möchte ich zwei Pop-ups an den Inhalt dieser beiden Arrays gebunden haben.

Meine Frage ist, wenn MyController einen Verweis auf MyModel hat und der Dropdown an MyViewController gebunden ist myModel.arrayOfPeopleNames?

Oder muss ich in myviewController ein zusätzliches NSArray einrichten, das das in MyModel widerspiegelt und stattdessen an diesen Tastatur binden?

Ersteres scheint aus einer Implementierung viel einfacher zu sein (ich muss das Controller -Array nicht zum Modellarray widerspiegeln), aber ich frage mich, ob es das Modell zu viel zur Ansicht aufdeckt.

Meinungen?

War es hilfreich?

Lösung

Sie sollten das Array des Modells im Controller nicht widerspiegeln. Obwohl ich in einem sehr einfachen Fall nicht allzu besorgt darüber bin, direkt an das Array des Modells zu binden, können Sie Ihre UI -Objekte auch an einen NSArrayController binden, der das Array des Modells verwaltet. Dies würde eine Trennung zwischen Modell und Benutzeroberfläche bieten und vor allem Aufgaben wie Sortieren, Auswahl, Hinzufügen und Entfernen von Objekten usw. behandeln.

Ich kann sehen, woher Sie kommen, indem Sie besorgt sind, dass KVO und Bindungen gegen das Design von "reinem" Modell View Controller verstoßen, aber es ist nichts, worüber Sie sich Sorgen machen sollten. Auch wenn die KVO -Benachrichtigungen direkt an die Ansicht des Modells übergehen, liegt das Einrichten und Ändern der Verbindung zwischen der Ansicht und dem Modell immer noch in der Verantwortung des Controllers (nur in diesem Fall wird sie stattdessen über IB durchgeführt). Zum Beispiel möchten Sie nicht, dass ein Modellobjekt einen Hinweis auf die Ansicht erhält und sich an die Benutzeroberfläche binden würde, was die Verantwortung des Controllers wäre.

Betrachten Sie als ein weiteres Beispiel für etwas zu vermeiden, ob stattdessen Ihr Modell eine Reihe von "Tier -IDs" anstelle von Namen hatte. Anstatt eine Methode zu erstellen, mit der Tier -IDs in das Modell des menschlichen lesbaren Tiernamens übersetzt werden, möchten Sie stattdessen möglicherweise einen Werttransformator oder eine Formaterin erstellen, um die Konvertierung durchzuführen. Auf diese Weise können Sie diesen Trennungsgrad zwischen Modell und Ansicht beibehalten.

Beachten Sie auch, dass der Zweck von Entwurfsmustern darin besteht, die Komplexität der Codierung einer Lösung für ein Problem zu verringern, und sie niemals zu erhöhen. Sie werden sehen, dass genau so Kakao funktioniert, auch wenn es sich möglicherweise nicht immer an die strengste Definition eines Musters hält.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top