Допустим, вы создали два объекта: objectA и objecB. Если objectA необходимо отправить сообщение в objectB, если это произойдет так:
objectA.theMessage(objectB)
или вот так:
objectB.theMessage(objectA)
Более конкретный пример:
Publisher p;
Subscriber s;
// way 1
p.addSubscriber(s);
// way 2
s.subscribeTo(p);
Как вы можете видеть, семантика обоих messeges (функций) одинакова, это просто вопрос, где должна жить функция.
Существует ли жесткое и быстрое правило, в котором говорится, что следует сделать? Или есть общее руководство, которое поможет вам определить, какой дизайн лучше? Или это дело в каждом конкретном случае, и не существует общего руководства? Если да, не могли бы вы объяснить, когда я буду использовать каждый из них. Можете ли вы назвать какие-либо потенциальные преимущества / недостатки каждого из них?
Большое спасибо за ваше время и знания!
Разница здесь в том, предпочитаете ли вы пуш или пулл паттерн. Какой из них лучше подходит, сильно зависит от приложения. «Толчок» в основном означает A
посылает B
сообщение, тогда как «тянуть» означает B
получает сообщение от A
,
Как уже говорилось, нет общего правила, но часто можно ответить на вопрос со здравым смыслом. Рассмотрим пример: сегодня утром мы с семьей завтракали. Раньше мне приходилось ехать в пекарню, чтобы получить хлебные булочки (это в Германии, нам нравится наш Brötchen). С другой стороны, газета, которую я читал за завтраком, принадлежала продавцу бумаги. Эта установка подходит: я сам хотел хлебные булочки, поэтому я поработал, чтобы их достать, но мне, наверное, было бы лень выходить на улицу и покупать газету (если ее не получат в пекарне). С другой стороны, если бы хлебные булочки были доставлены, а газета — нет, я бы в итоге получил более дорогие булочки и никакой газеты. Глупый пример конца.
Итак, что это значит для вашего дизайна? Тот, кому обязательно нужно сообщение было отправлено с A
в B
вызывает это. По моему опыту, это часто приемник, поэтому выбор тяг часто является первым выбором (кроме того, он позволяет легче ленивая оценка — только получить сообщение, когда это действительно необходимо). Но, как сказано, это действительно зависит от приложения. Сделай свой выбор 🙂
Других решений пока нет …