Superamento del riferimento circolare

3

Sto lavorando su un'applicazione web MVC asp.net che contiene diversi progetti.

Uno è BusinessObjects, che contiene logica / processi aziendali.

Un altro è EmailGeneration che viene utilizzato per inviare campagne di marketing / email dei clienti.

Il progetto EmailGeneration fa riferimento al progetto BusinessObjects perché è necessario generare e-mail basate su modelli basate su Business Objects.

Devo essere in grado di attivare e-mail da oggetti di business in modo che possa, ad esempio, inviare automaticamente una fattura al completamento di un ordine.

Tuttavia, non posso aggiungere il riferimento poiché creerebbe un riferimento circolare. Questo suggerisce che il mio design è difettoso.

Come posso modificare il mio progetto per ridurre l'accoppiamento tra i componenti?

    
posta Kev 24.01.2013 - 18:03
fonte

2 risposte

3

Sono d'accordo sul fatto che sembra che il tuo design sia difettoso nel fatto che gli oggetti aziendali hanno bisogno di inviare e-mail. Sembra che questo dovrebbe essere fatto in una sorta di livello di dominio non gli oggetti stessi? Difficile da dire. In alternativa puoi guardare alla creazione di un altro progetto che contiene varie interfacce per i tuoi oggetti di business. Quindi le tue dipendenze assomigliano a:

Business.Objects => Business.Objects.Interfaces
                 => Business.Email

Business.Email   => Business.Objects.Interfaces

Tuttavia, come indicato, probabilmente riceverai più aiuto su SO o Programmer.

    
risposta data 24.01.2013 - 20:00
fonte
4

Penso che la risposta di Dreza risolva il problema dell'accoppiamento, ma continua quello che vedo come un difetto comune: più progetti.

Più progetti vengono utilizzati molto più frequentemente di quanto non siano effettivamente necessari. A meno che non vi sia un'esigenza FISICA per più progetti, essi aggiungono complessità senza troppi, se non nessuno, beneficio. Prendi il tuo problema come esempio, nel migliore dei casi, incoraggia l'accoppiamento basso. Ma devi creare un altro progetto per implementarlo, e se tu stessi facendo test unitari probabilmente verrai alla stessa soluzione da una direzione diversa. E anche l'incoraggiamento non è privo di un potenziale svantaggio - l'altro modo per superare la dipendenza circolare è dividere il progetto nella sua soluzione, che nasconde il problema.

Ti incoraggerei a procedere con la definizione di un'interfaccia come suggerito da dreza, ma anche a esaminare la possibilità di unire qualsiasi progetto in un singolo progetto. A meno che i progetti non vengano utilizzati da app diverse o su hardware diverso, più progetti sono, IMO, un cattivo progetto.

    
risposta data 27.01.2013 - 20:41
fonte

Leggi altre domande sui tag