Есть N типов сущностей. Например, Товар, Заказ, Заказчик и Продавец. У
некоторых объектов данных сущностей могут срабатывать
разного рода события. Например, после покупки Заказчик может посмотреть счет, а может и сразу оплатить, не смотря в него. И наоборот, такое событие может быть привязано к Продавцу.
Собственно вопрос. Как реализовать такую модель, чтобы:
Все собития могли быть описаны в одном месте
Максимально абстрагировать код клиента (программа, работающая с этими сущностями) и код сервера (программа, реализующая эти сущности)
События можно привязывать от одной сущности к другой без изменения кода клиента и сервера