Ich entwerfe eine API-Schnittstelle für einen Magazin-Viewer. Etwas wie iGizmo (für iPad). Die Ansicht, in der ein Magazin angezeigt wird, ist einer TableView sehr ähnlich. Wie man Artikel als Abschnitte und Seiten als Zellen denken kann.Begründung für das Design von UITableViewDataSource
Aus diesem Grund möchte ich DataSource & Delegate in der gleichen Weise verfügbar machen, wie UITableView tut. Ich bin mir jedoch nicht ganz sicher, warum Apple TableView deligate/DataSource so entworfen hat, dass es immer den TableView als Parameter in jeder Methode zur Verfügung stellt.
Ich habe versucht, es zu rationalisieren, und ich fand keine gute Entschuldigung für solche api Design. Ich überlege, den Parameter tableView
/magazineView
in meiner API wegzulassen.
Sehen Sie gute Gründe für ein solches API-Design?
Wäre es nicht einfacher und klarer, Methoden wie die folgende zu schreiben?
– cellForRowAtIndexPath:
– numberOfSections
– numberOfRowsInSection:
– sectionIndexTitles
– sectionForSectionIndexTitle:atIndex:
– titleForHeaderInSection:
– titleForFooterInSection:
Genau richtig, eine Datenquelle kann Inhalt für viele Ansichten bereitstellen, und ein Delegat kann der Delegat vieler Ansichten sein. Darüber hinaus muss ein Delegat oder eine Datenquelle möglicherweise in einigen Fällen die Ansicht, in der sie aufgerufen wird, überprüfen, um festzustellen, wie sie reagieren soll. – Jonah
@Jonah, @middaparka, stimme ich zu, aber haben Sie jemals eine Datenquelle so implementiert, dass eine Instanz mehrere Tabellenansichten bedient? Warum nicht zwei Instanzen derselben Datenquellenklasse erstellen? Ein solches API-Design scheint die Tatsache zu ignorieren, dass objc eine OO-Sprache ist. –
Ich schreibe eine Datenquelle, um eine bestimmte Ansicht eines Modells bereitzustellen, und kann diese Datenquelleninstanz möglicherweise für mehrere Ansichten wiederverwenden, z. B. unterschiedliche Tabellenansichten in unterschiedlichen Ausrichtungen, aber ich stimme zu, dass die Datenquelle normalerweise nicht berücksichtigt werden muss das Objekt, das die Daten anfordert. Meine Delegierten überprüfen andererseits ständig die Identität ihres Anrufers, zum Beispiel kann ich eine Sammlung von NSURLConnections verwalten, indem ich eine einzelne Klasse als ihren kollektiven Delegaten benutze. – Jonah