Возможно ли использовать шаблон публикации-подписки с одним издателем и одним подписчиком?

#c# #design-patterns #dependency-injection #publish-subscribe #observer-pattern

#c# #шаблоны проектирования #внедрение зависимостей #опубликовать-подписаться #наблюдатель-шаблон

Вопрос:

Я не знаю, должен ли я использовать publish-subscribe (сейчас мне кажется сексуальным, но позже ..), observer или DI и методы вызова. У меня две ситуации:

  • (A) один класс создает «событие», которое должно запускать код из другого класса (данные изменились — что-то пересчитать)
  • (B) один класс вызывает метод из другого класса и должен запускать код, когда что-то происходит в вызываемом методе после возврата вызываемого метода (выполните этот код, когда вы завершите часть задачи, потому что мне нужно изменить свое внутреннее состояние)

Опции:

  1. Создайте какую-то шину событий, один класс подписывается на тему, другой класс публикует что-то в нем. Есть один издатель, один подписчик. Вещи разделены. Сложнее ориентироваться и выяснять, что вызывает, что и когда.

  2. Создайте список наблюдателей (с одним наблюдателем) в классе «событие» и уведомите его. Список содержит интерфейсы (или что-то вроде события в C #). Уведомляемый класс должен знать, куда себя добавить (в качестве наблюдателя). Не так развязано, как раньше, нет необходимости в какой-либо шине событий.

  3. Используйте DI, чтобы ввести экземпляр, который должен быть уведомлен непосредственно в «издатель» и вызвать какой-либо метод. Простой, немного более связанный?

  4. Обратный вызов передается из одного класса в другой либо во время какой-либо инициализации (A), либо во время вызова метода (B) (передача обратного вызова другому методу, который будет вызываться при необходимости, в порядке?)

    Просто хочу добавить, что система меняется очень быстро, это скорее подтверждение концепции или прототип.

Комментарии:

1. Да, это ваши варианты. Но если вы спрашиваете, каков наилучший вариант, никто, кроме вас, не сможет ответить, поскольку в вопросе не так много контекста. Этот вопрос, скорее всего, будет закрыт как «основанный на основном опионе» или «слишком широкий».

2. Мое мнение таково, что если это только один из них, помните YAGNI (вам это не понадобится) и пока придерживайтесь самого простого подхода, особенно если это POC. Вы всегда можете провести рефакторинг позже, если это необходимо.