Sto sviluppando un'app per iOS e mi sto spostando su un'architettura simile a VIPER. Assomiglia a questo:
Visualizza - ViewModel - Router - ViewModel - Visualizza
La differenza dal VIPER è che ho un Router globale invece di molti Wireframes (è motivato dalla funzionalità dell'app: quasi tutto può essere aperto da qualsiasi luogo). Il router contiene assemblatori per schermi diversi, nonché menu e controller di navigazione. Il problema è che l'app è abbastanza grande e il router viene iniettato con troppi argomenti. Il suo costruttore ha questo aspetto
struct RouterImpl: Router {
/* ... */
init(window: UIWindow,
mainNavigationController: MainNavigationController,
menuNavigationController: UISideMenuNavigationController,
menuViewControllerFactory: MenuViewControllerFactory,
splashScreenControllerFactory: SplashScreenFactory,
mainViewControllerFactory: MainViewControllerFactory,
webViewControllerFactory: WebViewControllerFactory,
locationPickingViewControllerFactory: LocationPickingViewControllerFactory,
cartViewControllerFactory: CartViewControllerFactory,
productScreenAssembler: ProductScreenAssembler,
personalAreaOrderItemsAssembler: PersonalAreaOrderItemsAssebler)
}
Dove l'assemblatore è qualcosa che ha vista e visualizza le fabbriche diModel e le unisce per creare un'unica schermata.
Se è già molto più grande di quanto dovrebbe essere, sarà ancora più grande se sarà finito con lo stesso design. Cosa posso fare per semplificare o perlomeno migliorare il suo costruttore?