Domanda

CodeCampServer codice sorgente contiene un generico StaticFactory .

sto supponendo che questo è un pezzo fondamentale del meccanismo di come il quadro gioca bene con Dependency Injection.

Le sottoclassi di cui uso è DefaultUnconfiguredState per fornire accesso statico, beh, un predefinito non configurato Stato per se stessi, che il meccanismo di risoluzione delle dipendenze può sostituire con roba di lavoro.

Non sono stato in grado di trovare alcuna documentazione per questo ...

C'è una buona spiegazione in il libro ? (Sto in attesa di consegna da Amazon ...)

... o chiunque altro in grado di fornire un buon commento su ciò che questo è e se sarei saggio di adottare questo schema (se si tratta di uno ...)?

Aggiorna

Dal momento che Jeffrey Palermo ha risposto a questa domanda vedo che nel manoscritto (work-in-progress) per MVC2 in azione questo modello / stile è discusso e illustrato con una fabbrica che viene utilizzato per individuare un repository al fine di mantenere la strato di dominio ignorante delle preoccupazioni di persistenza. (Vedi capitolo 23 ).

Per impostazione predefinita, l'uso di questa fabbrica genera un'eccezione:

  

"la conoscenza di come creare il   repository non risiede con la   fabbrica. Questa fabbrica solo   rappresenta la capacità di ritorno   repository "

L'esempio potrebbe essere utilizzato uno dei diversi meccanismi per inizializzare una concreta dell'interfaccia repository. Nell'esempio nel libro eleggono non utilizzare un contenitore IOC per semplicità e fornire esplicitamente in una logica di avviamento.

  

"La cosa importante è che nessuno dei due   il progetto Nucleo né il progetto di interfaccia utente   dovrebbe fare riferimento Infrastructure   progetto o librerie che sono puramente   infrastrutturale in natura. abbiamo   mantenuto NHibernate completamente fuori al   lato in modo che il resto della   applicazione non importa quanto i dati   accesso sta accadendo "

Un ultimo punto da notare il codice di esempio in questo nuovo capitolo è che la fabbrica non è più statico (almeno non per quanto riguarda l'interfaccia rivolte all'esterno è interessato).

Aggiorna 2

Mr Palermo bloggato un po 'di più su questo particolare stile di Abstract Factory (vedere l'implementaion di OrderShipperFactory).

Potrei anche basta considerare 'Manuale Dependency Injection' (lo zio Bob).

Aggiornamento 3 - Marzo 2016

un altro esempio di qui , anche se Jeffrey è esplicito su questo codice demo essere, e il commento indica che questo sarebbe configurata in quello che Mark Seeman chiamerebbe un Composizione Root (vale a dire Avvio applicazione)

ho scoperto questo nell'articolo di Jeffrey " Cipolla Architettura: parte 4 - Dopo quattro anni "

È stato utile?

Soluzione

Buona domanda. Non mi piace neanche. E 'in realtà dovrebbe essere chiamato "StartupFactoryConfiguration", ma è sulla lista refactoring.

Abbiamo giocato con questa idea come un modo per impostare DI per i posti che non erano sotto l'iniezione del costruttore attraverso il contenitore.

Si andrà via. Non so che cosa l'anti-modello è (quale nome?), Ma StaticFactory morirò.


Ora è stato rinominato partire da questa mattina. Ora è AbstractFactoryBase. Si tratta di un'implementazione del pattern Abstract Factory: http://en.wikipedia.org/wiki/Abstract_factory_pattern

L'attuazione della fabbrica è finire chiamare un contrainer CIO, ma consente l'accesso da un luogo in codice senza un riferimento assieme al complesso contenitore CIO.

Saluti, Jeffrey Palermo

Altri suggerimenti

Tutto ciò statico è un nemico del DI.

Questa StaticFactory assomiglia ad un'implementazione del href="http://martinfowler.com/articles/injection.html#UsingAServiceLocator" rel="noreferrer"> Service Locator (anti-) modello

ritengo Service Locator essere un anti-modello, poiché è totalmente opaco all'utente delle API che dipendenze devono essere in atto; in tal modo, si potrebbe facilmente invocare metodi su oggetti in un contesto in cui il Service Locator getterebbe, e l'API ti dà assolutamente alcun indizio che questo è il caso.

Una corretta DI come l'uso copioso di Constructor iniezione è un'alternativa molto migliore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top