Condivisione della logica tra i servizi

-1

Recentemente stavo parlando con il mio capo di servizi di composizione da altri servizi (in un'architettura orientata ai servizi, se non l'hai già indovinato). Siamo in disaccordo su alcuni principi architettonici e mi piacerebbe trovare alcuni articoli da leggere sull'argomento per aiutare la discussione.

La mia tesi è che l'iniezione di servizi in altri servizi va bene. Ad esempio, non ho problemi con quanto segue:

class SomeService {

    protected $anotherService;

    public function __construct(AnotherService $anotherService)
    {
        $this->anotherService = $anotherService;
    }

    public function doSomething()
    {
        ...
        $this->anotherService->getWhatever();
        ...

        return $someObject;
    }
}

Alcuni colleghi (e il mio capo) sembrano pensare che questa non è una buona pratica . La loro dura regola è che un servizio non può dipendere da un altro servizio, solo un repository (o qualcosa nel livello architettonico sottostante). Le implicazioni per questo sono che abbiamo un sacco di codice duplicato, ma affermano che qualcosa non è chiaro sulla composizione di servizi da altri servizi.

Ci sono articoli, libri, ecc. che potrebbero essere utili da considerare?

    
posta Eric Keyte 02.03.2017 - 18:11
fonte

2 risposte

1

In base alla descrizione del tuo problema, penso che il problema sia altrove.

Se i tuoi servizi devono essere composti nel modo in cui descrivi, sembra che non abbiano limiti di responsabilità chiari.

Potresti scoprire che questo problema scompare se ogni servizio ha una sola responsabilità e il livello sovrastante è responsabile della loro integrazione in funzionalità più significative per il business.

    
risposta data 02.03.2017 - 18:47
fonte
0

Hai sbagliato entrambi. I servizi possono essere composti da altri servizi, ma non in un ordine di dipendenza. Di base non vi è alcuna differenza tra un servizio, un componente o una classe. Il modo in cui "colleghi" le cose è diverso.

  1. Servizi astratti e utilizzare solo tali astrazioni all'interno di altri servizi.
  2. Utilizza SoC a livello di servizio e associa utilizzando (ad es.) un ServiceLocator
risposta data 02.03.2017 - 22:41
fonte

Leggi altre domande sui tag