Ho difficoltà a rappresentare e riutilizzare alcune "operazioni" che vengono comunemente eseguite dai Servizi Applicazioni ma non fanno parte del Dominio. Un po 'di contesto:
Implemento CQRS per i servizi applicativi e seguo questa struttura (esempio):
/Services
/Client (FunctionalModule)
/Commands
/CreateClient
/UpdateClient
/Queries
/GetAllClients
Tutti i comandi hanno la sua richiesta, risposta e gestore e sto utilizzando un "mediatore" link per comunicare dalla distribuzione livello di servizi al livello applicazione (invia un comando e il mediatore cerca i gestori associati).
Ora ho molti di questi comandi e query (UseCases) che condividono alcune operazioni particolari come alcuni calcoli che implicano il recupero dei dati. Il nostro approccio è sempre quello di "duplicare" questo codice nei casi d'uso (call repository, call domain services), ma ora lo abbiamo trovato difficile da mantenere. La nostra soluzione attuale è la seguente:
/SharedComponents?
/Abstract
/IXxxCalculator
/IXxxGenerator
/Implementations
/XxxCalculator
/XxxGenerator
Queste interfacce hanno solo un metodo e io voglio usarlo all'interno del contenitore DI, come componenti. È un approccio corretto? C'è qualche concetto o soluzione riguardo a questo problema?
EDIT: alcuni pseudocodici per chiarire la domanda:
public void MyCommand(MyCommandRequest req)
{
// Some code
var data1 = repository.GetMyValueBy(id);
var data2 = repository.GetMaxValueByType(type.Id);
var data3 = repository1.GetCorrectionByDevice(device.Id);
var myCalcValue = myDomainCalculatorSevice.Calc(data1, data2, data3);
// More code
}
Il codice attuale è un po 'complesso in grado di cambiare. Quelle modifiche saranno valide per tutti i UseCases / Commands che utilizzano questo tipo di calcoli. Servono altre operazioni per ottenere i dati necessari.
E le soluzioni che stiamo utilizzando assomiglia a questo:
public void MyCommand(MyCommandRequest req)
{
// Some code
// mySharedComponent comes from DI.
var myCalcValue = mySharedComponent.Calc(req.SomeValue);
// More code
}
I SharedComponents sono solo per uso interno dell'applicazione.
Abbiamo alcuni programmatori meno esperti, quindi stiamo cercando di ottenere una soluzione pragmatica e stravagante, non la più purista. Inoltre, c'è un nome migliore al posto di SharedComponent?
Grazie in anticipo! Óscar