Fabbriche e associazione di eventi

1

Le fabbriche sono usate per creare oggetti. Mi chiedevo se fosse contro lo scopo di una fabbrica, se legassi insieme un paio di oggetti in fabbrica. Lasciatemi illustrare questo con un esempio.

Diciamo che ho una fabbrica che produce finestre di dialogo modali. La fabbrica può creare un'istanza di una vista, che verrà visualizzata sullo schermo. Inoltre ho bisogno di alcuni pulsanti per essere presente sulla vista e che dovrebbero fornire alcune funzionalità, diciamo chiamiamo un servizio tramite qualche delega.

A seconda del tipo di finestra di dialogo modale, desidero essere in grado di fornire pulsanti e comportamenti diversi.

class ModalFactory {

       static func createWeatherModal() -> ModalWindowProtocol {
           let modal = SomeModal()
           let closeButton = CloseButton() 
           let verifyWeatherButton = WeatherButton()
           modal.addButton(verifyWeatherButton)
           modal.addButton(closeButton)
           let service = RemoteApi()

           verifyWeatherButton.performAction {
                 service.calculateWeatherConditions()
           }

           closeButton.performAction {
                 modalal.dismiss()
           }
        }

        static func createAdvancedWeatherModal() -> ModalWindowProtocol {
           let modal = AdvancedWeatherModal()
           let service = AdvancedWeatherService()
           let weatherButton = WeatherButton()
           let closeButton = CloseButton()
           modal.addButton(weatherButton)
           modal.addButton(closeButton)
           weatherButton.performAction {
                service.getAdvancedWeatherInfo()
           }
           closeButton.performAction {
                modal.dismiss()
           }
        }
     }

Quindi, ce l'hai. Il binding di un evento tap avviene in fabbrica. È una buona pratica? E se no, cosa suggeriresti per questo tipo di creazione e associazione dinamica modale?

Grazie

    
posta DS888 28.08.2018 - 16:05
fonte

2 risposte

0

Mentre il chiamante non richiede input diretti su come creare l'oggetto prodotto dalla Factory, un pattern Factory è perfettamente a posto, anche quando generi più oggetti.

Se vuoi essere più dinamico e consentire flessibilità nella creazione, senza rinunciare al vantaggio di lasciarlo alla classe per gestire le implementazioni specifiche, considera l'utilizzo di un Modello di generatore .

L'esempio che usano è un CarBuilder che ti consente di costruire un Car specificando vari aspetti di quell'auto. Se pensi di poter fare sia un "modale meteo" che un "modale meteo avanzato" usando questa classe, allora fantastico! Il modello di costruzione è per te! In caso contrario, non force la classe per gestire entrambi. In questo caso, crea un secondo builder come necessario.

    
risposta data 28.08.2018 - 16:34
fonte
0

Se è abbastanza buono per Bill Gates ...

link

Tuttavia, non è molto MVVM. Non si dice quale lingua o framework si sta utilizzando, ma penso che se si eseguissero tutti i controlli in questo modo si finirebbe con un sacco di logica di visualizzazione nella classe factory, che a seconda del framework potrebbe non essere la migliore pratica

    
risposta data 28.08.2018 - 16:15
fonte

Leggi altre domande sui tag