TL; DR : Ich würde dir empfehlen, ein DI-Framework wie Typhoon zu verwenden und das zuzulassen Instanziierung handhaben.
Der Grund, warum Sie wahrscheinlich nicht möchten, dass Ihre Wireframes alles in einem VIPER-Modul (View, Presenter, Interactor, DataManager) instanziieren, ist, dass Sie Abhängigkeiten direkt für jede dieser Komponenten erstellen werden.
Abhängigkeiten machen Software resistent gegen Veränderungen: wenn wir daran mit unserer Zwiebelarchitektur denken / sechseckige Architektur Hüte auf, würde der Drahtmodell die Grenzen von mindestens zwei separaten Schichten Ihrer Zwiebel überschreiten, indem Sie nicht nur wissen die Ansicht, aber der Datenmanager.
Dies zwingt uns, Wireframes als eine allgemeine Infrastrukturklasse zu behandeln: d. h. etwas auf der äußersten Ebene Ihrer Anwendung.
Dies widerspricht jedoch der anderen (und eher realen) Verantwortung des Drahtmodells: der Navigation. Während dies immer noch die Infrastrukturschicht ist, gehört sie fest und spezifisch in UIKit
( -presentViewController:
etc.).
Also IMHO, VIPER Drahtmodell macht zu viel.
Das einzig Vernünftige ist, die zwei Verantwortlichkeiten aufzuteilen:
- Initialisierung der VIPER-Klassen: Sie können eine Factory einführen oder DI-Tools verwenden, die dieses Problem lösen sollen
- Navigation machen: Dies bleibt im Rahmen eines
Wireframe
.
Zusätzliche Hinweise
Wenn Sie sich fragen " wer das nächste Modul instanziiert?", dann nochmal, IMHO, ich denke es ist nicht richtig, dass einige Drahtgitter von Module A
mit Drahtgitter von Module B
sprechen trotz was der VIPER Beitrag sagt.
Der Grund ist, dass Module A
jetzt von Module B
abhängig gemacht wird, was zu einer engen Kopplung führt: Dies vereitelt den Zweck von Modulen. Viel mehr Diskussion zu diesem Thema im VIPER-TODO-Projekt bei GitHub =]
Hoffe, das hilft.