DDD: riutilizzo del codice del servizio applicazioni

1

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

    
posta Oscar Vicente Perez 06.06.2018 - 19:11
fonte

0 risposte

Leggi altre domande sui tag