У меня есть следующий код:Композитный дизайн: как передать результаты из одного компонента в другой?
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();
}
}
}
Проблема заключается в том, что ServiceB зависит от некоторых результатов ServiceA. Моя идея заключается в том, чтобы создать класс контейнера для хранения результатов, а затем вводит его в обоих ServiceA и ServiceB:
class ServiceResults
{
public string SomeProperty {get; set;}
}
public ServiceComposite()
{
ServiceResults result = new ServiceResults();
_services.Add(new ServiceA(result));
_services.Add(new ServiceB(result));
}
мне интересно, если это самый лучший способ решить эту проблему. Может быть, это нарушает некоторые принципы или правила, о которых я не знаю, или просто «запах кода». Каковы лучшие способы сделать это?
Мне было бы интересно узнать больше о том, почему 'B' нуждается в результатах от' A' - кажется, что если это так, то неправильно рассматривать их как два отдельных реализации. –
Или служба A может предоставить результаты в качестве свойства и передать услугу A в качестве зависимости для службы B – Thangadurai
. На самом деле вы не реализуете шаблон «Композитный». – Servy