Ich versuche, die von Robert Martin beschriebenen Clean Architecture zu implementieren. Genauer gesagt verwende ich VIPER, die eine iOS-Version von Clean Architecture ist.Saubere Architektur - Robert Martin - So verbinden Sie Anwendungsfälle
Das Problem, das ich habe, ist wie folgt:
Der Benutzer startet mit Plätzen (Pins) auf sie auf einer Karte an. Wenn er auf eine Schaltfläche klickt, wird eine PIN gelöscht und er wird zu einer anderen Ansicht geleitet, um den Ort zu erstellen (oder zu bearbeiten, wenn es sich um einen Klick auf eine vorhandene PIN handelt) (oder abzubrechen). In dieser anderen Ansicht kann der Benutzer die Ortsinformationen bearbeiten und dann auf "Zurück" oder "Fertig" (oder "Bearbeiten") klicken. Wenn er auf "Fertig" klickt, sendet der PlaceDetailsViewController eine Nachricht an den PlaceDetailsPresenter mit den Ortsinformationen und der PlaceDetailsPresenter verwendet den CreatePlaceInteractor, um den Ort zu erstellen. Dieser Interaktor gibt die GUID zurück, die zur Identifizierung des Ortes verwendet wird.
Wenn der Benutzer zurückklickt, bevor er den Ort erstellt, kehrt er zur Karte zurück und der abgelegte Pin geht hoch und weg (da es keine GUID hat, ist es ein neuer Ort und verschwindet). Wenn er nach dem Erstellen zurückklickt, bleibt der Pin dort (weil er eine GUID haben sollte).
Wie sollte ich all das verbinden und wo sollten die Ortsinformationen (einschließlich GUID) gespeichert werden? Um ein wenig mehr zu klären:
- Wer die MapPresenter informieren sollte, dass der Stift dort bleibt oder geht weg? Ist es der PlaceDetailsPresenter oder soll ich diese Informationen an die PlaceDetailsWireframe -> MapWireframe -> MapPresenter -> MapView übergeben?
- Bevor Sie zurückgehen, wo sollte diese GUID gespeichert werden, in der PlaceDetailsPresenter oder in der PlaceDetailsViewController?
Gerade jetzt, dass das, was ich habe:
EDIT:
Grundsätzlich denke ich, das Problem, dass VIPER von Robert Martin Clean Architektur kam und er kommt von einem Web (Rails) Hintergrund, also denkt er nicht viel über den Staat nach (oder präzisiert ihn nicht in seinen Gesprächen).
Das ist hauptsächlich meine Frage, wo sollte der Zustand gespeichert werden, wie sollten die verschiedenen Module kommunizieren, sollte es über den Wireframe, oder über die Datenbank, oder über die Interaktoren oder über die Presenter untereinander kommunizieren hier https://github.com/objcio/issue-13-viper-swift.
Ich bin nur mit VIPER anfangen, aber es fühlt sich für mich falsch Moderatoren voneinander wissen zu haben. Ich bevorzuge Module, die über den Drahtmodell/Router miteinander kommunizieren. Ich bin glücklich, hier korrigiert zu werden, da ich immer noch diese Architektur lerne. – bennythemink
Ich tendiere dazu, genauso zu denken wie du, obwohl ich immer noch keine entscheidende Antwort gefunden habe, wie man Informationen zwischen ihnen weitergibt, ob es besser ist, Datenstrukturen durch Drahtgitter zu übertragen (2 Optionen hier, benutze immer die gleiche, große, Datenstruktur, oder ändern Sie sich auf dem Weg, um nur die minimale Menge an notwendigen Informationen zu übergeben (was zur Folge mehr nicht wiederverwendbare Klassen zu schaffen), oder speichern Sie den Zustand in Interacter und verwenden Sie sie, um die Informationen in der anderen Presenter zu erhalten. Ich habe eine weitere Stackoverflow-Frage gestellt, die erklärt, was ich unter Big Data-Struktur verstehe, die ich bisher noch nicht gefunden habe. –
http://stackoverflow.com/questions/29054526/viper-should-the-interactor-return-only-the-necessary-information –