Sto cercando il modello migliore da applicare nel mio problema. Ho un'interfaccia che definisce la mia funzionalità della classe di servizio
interface NegotiationInterface {
    abstract public function resetNegotiation(Negotiation $negotiantion);
} 
Una classe principale lo implementa
public class NegotiationService implements NegotiationInterface {
    public function __construct(…Some Dependencies…)
    {
    ….        
    }
    public function resetNegotiation(Negotiation $negotiantion){
    …. //All business logic
    }
}
NegotiationService è registrato sotto il contenitore DI (basato su Symfony) e utilizzato in tutto il campo dall'identificativo del servizio.
$negotiationService = $this->container->get(“negotiation_service”);
$negotiationService->resetNegotiation($negotiation);
Tuttavia alcuni dei nostri clienti (la negoziazione contiene le informazioni sul cliente), richiedono un ulteriore passaggio dopo aver chiamato resetNegotiation, ad esempio la nostra logica di business comune + chiamando un webservice. Ho raggiunto lo schema del decoratore, ma non sono sicuro che sarebbe l'approccio migliore durante l'utilizzo di DI. In tal caso, come dovrei candidarmi insieme a DI. Mi piacerebbe avere questi passaggi aggiuntivi caricati dinamicamente in base al client.