Oggetto valore: fabbrica statica o iniezione assistita?

0

Per prima cosa supponiamo che tutti siano d'accordo sul fatto che non c'è nulla di male nell'iniettare qualche oggetto valore in un oggetto iniettabile come un servizio. In effetti, un servizio può ricevere un altro servizio iniettato, ma potrebbe anche ottenere alcune informazioni di configurazione. Informazioni sulla configurazione che verrebbero rappresentate come oggetto valore.

Ora parliamo di usare il framework DI, direttamente sul valore dell'oggetto. (Non lo dico intenzionalmente, applichiamo un'iniezione di dipendenza su oggetti valore, perché vedo i critici venire su cosa è una dipendenza e così via ...)

Ecco cosa può essere rosso ovunque:

Using DI for Value object is wrong or useless. They are newable. They do not have real dependency.

In generale non sarei d'accordo con l'idea di "newable" .

I think it is a good practice to use Factories anyway. It leaves you some control over how exactly the object is created and what strategy, you may use behind and etc...

La fabbrica stessa potrebbe essere configurata ed ecc ... Si potrebbe anche pensare di modificare l'implementazione istanziata per l'interfaccia data di un oggetto valore, in base al vincolo del sistema operativo oa qualsiasi condizione si possa pensare ...

Supponiamo ora che siamo tutti d'accordo nell'usare le fabbriche per la creazione di oggetti di valore. Partendo da questo, vorrei sviluppare il seguente punto: È possibile utilizzare un DI come semplice strumento di produzione, quando si tratta di oggetti valore?

Why I'm asking this:

Because i want to use factories as exposed above. I don't want to scattered around my value object creation. (Is that legitimate ?)

Questo significa che userò sicuramente l'iniezione assistita per creare il mio oggetto valore (L'altro modo sarebbe usare le fabbriche statiche nel mio codice) .

Essenzialmente utilizzando un DI come contenitore di fabbrica per l'oggetto valore, significa che è probabile che tu passi le fabbriche come parametro dei tuoi servizi, per consentire loro di creare quegli oggetti valore.

Quale usi? perché ? Perché dovresti essere contro l'uno o l'altro?

Preferisci usare un statico (Singleton / anti-pattern?) nel mezzo del tuo codice di servizio, o preferisci iniettare la tua fabbrica, meteorologicamente tramite un DI o una fabbrica che non è statica?

    
posta MaatDeamon 22.08.2014 - 19:51
fonte

1 risposta

7

Rifiuto la premessa della tua domanda. Gli oggetti valore, per definizione, sono classi di dati immutabili che utilizzano solo altri oggetti valore o primitive. Lo ripeto: gli oggetti valore non hanno dipendenze , quindi non è necessario utilizzare un modello in stile IoC come Abstract Factory *. Un oggetto valore con dipendenze non è un oggetto valore.

Quindi, nell'interesse del design semplice e del codice comprensibile, dovresti solo new sul tuo valore oggetto (i) a meno che tu non abbia una ragione davvero convincente per non farlo. Qualcosa di più complicato è overengineering .

L'unico caso di utilizzo a cui posso pensare di non utilizzare direttamente il costruttore è se devi scegliere tra un certo numero di sottoclassi del tuo oggetto valore in base a qualche condizione. (Sono scettico su quanto spesso avvenga realmente.) In tal caso, userei un metodo di factory statico, not injection dependency.

* Non penso che sia una buona idea usare IoC per tutto ciò che non è una dipendenza. In particolare, dovresti evitare di usare un contenitore per le classi nel tuo modello di dominio.

    
risposta data 25.09.2014 - 22:08
fonte

Leggi altre domande sui tag