J'ai le code suivant:Modèle de conception composite: comment transmettre les résultats d'un composant à un autre?
interface IService
{
void Execute();
}
class ServiceA : IService
{
public void Execute() { ... }
}
class ServiceB : IService
{
public void Execute() { ... }
}
class ServiceComposite : IService
{
List<IService> _services = new List<IService>();
public ServiceComposite()
{
_services.Add(new ServiceA());
_services.Add(new ServiceB());
}
public void Execute()
{
foreach (IService service in _services)
{
service.Execute();
}
}
}
Le problème est que Serviceb dépend des résultats de ServiceA. Mon idée est de créer la classe de conteneur pour stocker les résultats, puis l'injecter dans les deux ServiceA et Serviceb:
class ServiceResults
{
public string SomeProperty {get; set;}
}
public ServiceComposite()
{
ServiceResults result = new ServiceResults();
_services.Add(new ServiceA(result));
_services.Add(new ServiceB(result));
}
Je me demande si elle est la meilleure façon possible de résoudre le problème. Peut-être que cela brise certains principes ou règles dont je ne sais pas, ou est simplement "odeur de code". Quelles sont les meilleures façons de le faire?
Je serais intéressé d'en savoir plus sur pourquoi 'B' a besoin de résultats de' A' - il semble que si tel est le cas, il n'est pas juste de les traiter comme deux séparés implémentations. –
Ou le service A peut exposer les résultats en tant que propriété et transmettre le service A en tant que dépendance pour le service B – Thangadurai
Vous ne mettez pas en œuvre le modèle "Composite" ici non plus. – Servy