Есть некоторый класс Controller
, который является входной точкой в приложение и реализует интерфейс IController
с набором методов, доступных извне клиентам. Внутри Controller
состоит из множества компонентов(классов), таких как: Farmmanager
, RequestsManager
, MatrixnnManager
и многих других, которые выполняют разные задачи. Все это хозяйство располагается в UnityContainer
. При запуске приложения Controller
создает контейнер и устанавливается взаимодействие между компонентами(FarmManager
и др) посредством установления связи между обработчиками одних компонентов и событиями других. Каждый из компонентов внутри имеет подкомпоненты и далее, иерархия может быть глубокой. Архитектурно получается так, что клиент вызывает какой-то метод Controller
, а тот в свою очередь вызывает событие, которое уходит компоненту, тот пробрасывает подкомпоненту и далее.. Получается по 5-6 уровней, через которое пробрасывается событие. Архитектурно компоненты никак друг с другом не связаны, кроме как через события и обработчики, но это порождает необходимость сквозных пробросов. Подскажите пожалуйста, как можно преобразовать архитектуру так, чтобы несвязность компонентов сохранилась ,однако исчезла бы необходимость реализовывать одно и то же событие во всей иерархии компонента (подкомпонент, подподкомпонент).
Примерно это все выглядит следующим образом: (не стоит искать ошибок в коде, это накиданный пример)
public Class Controller : IController
{
public override event Eventhandler NewMessage;
public override void AddMessage(T message)
{
OnNewMessage();
}
public override NodeState GetStateOfNode(int index)
{
}
private void Start()
{
var container = new UnityContainer();
container.RegisterType<IFarmManager, FarmManager>(newContainerControlledLifetimeManager());
container.RegisterType<IRequestsManager, RequestsManager>(newContainerControlledLifetimeManager());
NewMessage+= RequestsManager.onNewMessage
}
}
public class RequestsManager: IRequestsManager
{
public override event Eventhandler NewMessage;
private QueueProcessDispatcher = new QueueProcessDispatcher();
public void onNewMessage()
{
OnNewMessage();
}
public void Start()
{
NewMessage+=QueueProcessDispatcher.NewMessage;
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Привет всем, у меня недавно возникла ситуацияЗаключается она в том что нужно оправлять письма пользователям, например за 5 дней до их дня...
EnumerableFirst - берет первый first элемент из коллекции, если коллекция пуста - падает эксепшн