Sto usando l'unità e sto creando una classe che lo avvolge e non so come chiamarlo, localizzatore di servizi o fabbrica, entrambi incapsulano la creazione degli oggetti, quindi .... qual è la differenza?Qual è la differenza tra il Service Locator e il modello Factory Design?
risposta
Una fabbrica crea oggetti per voi, quando richiesto.
Il localizzatore di servizi restituisce oggetti che potrebbero già esistere, ovvero servizi che potrebbero già esistere da qualche parte.
Basta pensare al significato dei nomi:
- fabbrica: è un luogo dove si creano oggetti.
- Servizio: è qualcosa che può fare qualcosa per te come servizio.
- Localizzatore di servizi: è qualcosa che può trovare qualcosa che può eseguire un servizio.
Leggi questo da Mark Seemann
http://blog.ploeh.dk/2010/11/01/PatternRecognitionAbstractFactoryOrServiceLocator.aspx http://blog.ploeh.dk/2010/02/03/ServiceLocatorIsAnAntiPattern.aspx
E 'un bene per l'inizio
In realtà c'è una netta separazione tra questo schema. È risaputo che entrambi i pattern sono utilizzati per evitare dipendenze da tipi concreti.
Tuttavia dopo leggere
- Agile Software Development, Principles, modelli e pratiche [libro] da Rober C. Martin
- Inversion of Control Contenitori e il modello Dependency Injection [articolo] di Martin Fowler http://martinfowler.com/articles/injection.html
- Riconoscimento pattern: Abstract Factory o Service Locator? [Articolo] di Mark Seemann in http://blog.ploeh.dk/2010/11/01/PatternRecognitionAbstractFactoryorServiceLocator/
- Design Pattern [libro] da Erich Gamma et al
Alcune contraddizioni gravi sorge spontanea:
Seemann ha detto: "An Abstract Factory è un tipo generico, e il il tipo restituito del metodo Create è determinato dal tipo di factory stesso. In altre parole, un tipo costruito può restituire solo istanze di un singolo tipo. "
Mentre Rober C. Martin non ha menzionato nulla sui tipi generici e inoltre, l'esempio di fabbrica nel suo libro consente di creare istanze di più tipi di oggetti distinguere tra loro utilizzando una stringa di chiavi come parametro in Factory.Make().
Gamma ha detto che l'intento di Abstract Factory è di "Fornire un'interfaccia per creare famiglie di oggetti correlati o dipendenti senza specificare le loro classi concrete". Vale la pena menzionare che l'esempio di Gamma Abstract Factory viola l'Interfaccia Segregation Principle (ISP) dichiarato da Martin. ISP e SOLID in generale sono principi più moderni o forse per semplicità dove omessi.
Le opere di Gamma e Martin precedono quelle di Seemann, quindi penso che dovrebbe seguire la definizione già fatta.
Mentre Fowler propone Service Locator come metodo per implementare Dependency Inversion, Seemann lo considera un anti-pattern. Né Gamma o Martin menzionano Localizzatore di servizi.
Tuttavia, Seemann e Fowler hanno concordato che Service Locator necessita di una fase di configurazione per registrare un'istanza di una classe di calcoli, quell'istanza è ciò che verrà restituito in seguito quando verrà richiesto un oggetto di quel tipo. Questa fase di configurazione non è menzionata da Martin o Gamma nella loro definizione di Abstract Factory. Il modello Abstract Factory suppone che un nuovo oggetto sia istanziato ogni volta che un oggetto di quel tipo viene richiesto.
Conclusione
La differenza principale tra Service Locator e Abstract Factory è che Abstract Factory supponiamo che un nuovo oggetto un'istanza di una restituito ad ogni richiesta e Service Locator deve essere configurato con un'istanza oggetto e ogni volta che il stessa istanza verrà restituita.
- 1. Il Local Service Locator è ampiamente utilizzato?
- 2. Qual è la differenza tra Gateway e Service Activator?
- 3. Qual è la differenza tra il modello di dominio e il modello concettuale
- 4. Qual è la differenza tra modello dati e modello oggetto?
- 5. Qual è la differenza tra l'utilizzo dell'anti-pattern di Service Locator e l'utilizzo del contenitore Castle Windsor? "
- 6. Qual è la differenza tra il modello di funzione e la funzione di modello?
- 7. Quando si utilizza il Local Service Service Locator?
- 8. Qual è la differenza tra il callback e la promessa
- 9. Qual è la differenza tra un tema e un modello?
- 10. qual è la differenza tra il modello-> alias e modello-> nome in CakePHP?
- 11. Qual è la differenza tra il modulo modello Ansible e il modulo copia?
- 12. qual è la differenza tra modello di visitatore e strategia?
- 13. Qual è la differenza tra un modello e un percorso?
- 14. Qual è la differenza tra il servizio, intentService in Android?
- 15. Qual è la differenza tra il panico e un assert?
- 16. Qual è la differenza tra il sistema lastra e buddy?
- 17. Qual è la differenza tra il nuovo operatore e Class.newInstance()?
- 18. Qual è la differenza tra NSInvocation e il blocco?
- 19. Qual è la differenza tra net.tcp e il protocollo TCP?
- 20. qual è la differenza tra i modelli e il polimorfismo
- 21. Qual è la differenza tra il formato OMF e COFF?
- 22. Qual è la differenza tra NSAutoreleasePool e il blocco @autoreleasepool?
- 23. Qual è la differenza tra il database MySQL e MariaDB?
- 24. ZF2 service locator & dependency injection
- 25. Qual è la differenza tra Verilog! e ~?
- 26. qual è la differenza tra [[], []] e [[]] * 2
- 27. Qual è la differenza tra `##` e `hashCode`?
- 28. Qual è la differenza tra la serratura e RLock
- 29. Qual è la differenza tra? : e ||
- 30. qual è la differenza tra:.! e: r !?
Il servizio alla fine è una classe, che fa qualcosa. Per recuperarlo deve essere creato in modo ... il Service Locator è come una fabbrica, perché deve creare un "nuovo" – toroveneno
Non è necessario creare un nuovo oggetto servizio ... invece l'oggetto servizio sarà registrato prima di provare a localizzare il servizio, potrebbe essere quando l'applicazione si avvia, in modo che in futuro il localizzatore di servizio possa restituire quel servizio a un chiamante. –
Come la "semplicità" della risposta – Spock