2008-11-10 5 views
10

Ich beginne ein Projekt, von dem ich denke, dass es von Bindungen profitieren würde (ich habe eine Quellenlistentabelle, mehrere Browseransichten usw.), aber ich denke, es wäre auch ohne sie machbar und vielleicht verständlicher. Aus meiner begrenzten Erfahrung habe ich herausgefunden, dass Bindungen schwer zu beheben sind und sehr "magisch" sind (z. B. ist es schwierig, irgendwo Logging einzufügen, um herauszufinden, wo alles kaputt geht, alles funktioniert oder nicht).Soll ich Kakaobindungen für mein neuestes Projekt verwenden?

Ist das nur meine Unerfahrenheit zu sprechen (in diesem Fall könnte ich mich hinsetzen und an meinem Verständnis von Bindungen arbeiten und erwarten, dass die Dinge klarer/einfacher werden) oder wäre es besser, nur den ganzen Klebstoff zu schreiben code mich in einer Weise, die ich sicher verstehen und beheben konnte.

Antwort

21

Verwenden Sie Bindungen.

Beachten Sie, dass Sie müssen folgen Sie dem MVC-Muster, um das Beste aus Bindungen zu bekommen. Das ist einfacher, als es scheint, als Cocoa heute für Sie fast alles tut:

  1. Ausblick: NSView und Unterklassen (natürlich), NSCell und Subklassen, NSWindow und Unterklassen
  2. Controller: NSController und Unterklassen (insbesondere NSArrayController)
  3. Modell: Core Data

Wenn Sie nicht verwenden Core Data gehen, dann bekommen Sie ro ll Ihre eigenen Modellobjekte, aber das ist einfach. Die meisten Methoden dieser Objekte werden einfache Zugriffsmethoden sein, die Sie einfach auf @synthesize ausrichten können, wenn Sie auf Leopard abzielen.

Sie kommen normalerweise nicht davon durch, keinen Code zu schreiben, aber Bindungen können Ihnen ermöglichen, sehr wenig Code zu schreiben.

Empfohlene Lektüre:

+0

Zusätzliche Bindungen, nachdem man sie verstanden hat, sind einfach und können wirklich mächtig sein, für mich gibt es keinen Grund, sie nicht zu benutzen. –

8

Bindungen können in der Natur magisch scheinen. Um die Magie hinter Bindungen zu verstehen, muss man KVC/KVO unbedingt verstehen. Ich meine es wirklich gründlich.

In meinem Fall (neu zu Obj-C - 9 Monate), einmal bekam ich KVC/KVO Bindungen war ein Nervenkitzel. Es hat meinen Klebecode deutlich reduziert und mein Leben wesentlich erleichtert. Bei der Debugging-Bindung wurde sichergestellt, dass meine Schlüsselwertänderungen beobachtbar waren. Ich finde, dass ich mehr Zeit damit verbringen kann, zu schreiben, was meine App tun soll, anstatt sicherzustellen, dass die Ansicht die Daten widerspiegelt.

Ich stimme zwar zu, dass Bindings am Anfang sehr einschüchternd ist.

5

Mein allgemeinen Ansatzes ist aus zu starten so viel wie möglich Verwenden Sie Bindungen und sehen Sie, wie die Dinge laufen.Wenn jedoch ein bestimmtes Interface-Element mit Bindings problematisch wird oder mehr Mühe als es wert ist, dann zögere ich nicht, auf traditionellere Methoden (z. B. Datenquellen, Aktionen) zurückzugreifen, wenn es sinnvoll ist. Ich habe festgestellt, dass diese Dinge ziemlich schwer vorherzusagen sind, aber ich denke, Bindungen zu favorisieren ist auf lange Sicht besser, solange man nicht zu dogmatisch wird, wenn man in Situationen, in denen sie nicht zur Verfügung stehen, mit ihnen klebt irgendein Vorteil.

4

Nach einer Weile der Arbeit mit Bindings habe ich festgestellt, dass es keine Magie ist, dachte, es ist ausreichend fortschrittliche Technologie. Debuggen einer gebundenen Schnittstelle erfordert andere Techniken als eine geklebte Schnittstelle, aber sobald Sie diese Techniken haben, sind die Vorteile in Bezug auf Wiederverwendung, Wartbarkeit und Konsistenz IMO signifikant.

+1

Können Sie mich auf Tutorials/Dokumentation zu Debugging-Techniken für gebundene Schnittstellen näher hinweisen? –

+0

Eines der einfachsten Dinge ist, dass, da die Schnittstelle und das Modell nur über Schlüsselpfade gekoppelt sind, es sehr einfach ist, Teile des Modells auszuhämmern oder zu verspotten, indem Sie Ihre Schnittstelle an einen Testtreiber statt an das reale Modell binden. –

2

Es scheint, als ob ich Bindings, KVO und Datenquellenmethoden ungefähr gleich in meinen Anwendungen verwende. Es hängt wirklich vom Kontext ab. Zum Beispiel verwende ich in einem meiner Projekte Bindings fast überall außer der Umrissansicht des Hauptfensters, die so komplex ist, dass ich nicht einmal versuchen möchte, sie in einen NSTreeController zu integrieren. Gleichzeitig verwende ich KVO, um UI-Objekte neu zu laden und Abhängigkeiten in meinen Modellobjekten zu verfolgen.

Die wichtige Sache, die man beachten sollte, wenn man fortgeschrittene Cocoa-Themen wie Bindungen oder Kerndaten lernt, ist, dass man alle Technologien dahinter verstehen muss; alles von Datenquellenprotokollen, Benachrichtigungen KVO, und so weiter. Sobald Sie genug Erfahrung mit ihnen zu arbeiten, um zu wissen, wie die "Magie" funktioniert, können Sie die höheren Ebenen Zeug in Ihre Anwendung mit Leichtigkeit integrieren.

In Ihrem speziellen Fall müssen Sie entscheiden, ob es sich lohnt, zusätzliche Bindungen zu lernen, um Ihre Anwendung zu entwickeln. Wenn es Ihnen möglich ist, können Sie einen vereinfachten Prototyp Ihrer Anwendung mithilfe von Bindungen entwickeln, damit Sie wissen, wie Sie die Teile am besten zusammenfügen, wenn Sie das eigentliche Projekt starten.

1

Für die Neugierigen habe ich am Ende Bindungen verwendet und nach ein paar Tagen haben sie plötzlich angefangen "Sinn zu machen". Ich würde definitiv empfehlen, einfach weiterzugehen und sich die Zeit zu nehmen, sie zu lernen.

Ich fand auch den Rat von Brian Webster ziemlich hilfreich, da ich tatsächlich eine Handvoll Dinge auf die altmodische Art gemacht habe, entweder weil Bindungen nicht das machen konnten was ich wollte oder weil es unerschwinglich kompliziert gewesen wäre was ich mit Bindings brauchte.

2

Meine Meinung ist, dass ja, Sie sollten Bindungen annehmen; Die Technologie ist jetzt gut verstanden und stabil, und es lohnt sich, die Menge Code zu verwenden, die Sie nicht mehr schreiben müssen. Als ich zum ersten Mal zu Bindungen wechselte, hatte ich einige Probleme damit, die Lebensdauer von beobachteten und beobachteten Objekten aufeinander abzustimmen, und mit UI-Brüchen, weil es ein gültiges Objekt beobachtete, aber das falsche. Sobald Sie diese Probleme ein paar Mal gesehen haben, wird es einfach, zu wissen, wie man sie vermeidet und wie man sie erkennt, wenn sie auftreten. Ish. Ich wünsche immer noch "dieses Ereignis hier verursacht dieses Update hier" Spuren im Debugger, aber ich bin immer noch froh, dass ich den Umzug gemacht habe.

Verwandte Themen