Абсолютно разобщать код невозможно.Они должны говорить.Если вы действительно хотите обеспечить максимальную развязку, следует использовать какой-то механизм IPC / RPC и иметь две разные программы.
Тем не менее, мне не нравятся шаблоны посетителей.
У вас есть графический объект, который связан с объектом поведения.Возможно, существуют правила между поведением и графикой, например, границы не могут перекрываться.
Вы можете делать свои отношения сущностей между графическими объектами и поведением, это логический вопрос бизнеса ...
Вам понадобится некоторый thungus, который содержит ваш контекст рисования (img, screen, buffer)).
class DrawingThungus {
void queue_for_render(Graphical*);
void render();
};
Ваш графический объект будет иметь наследование или композиционные отношения с поведением.В любом случае, у них будет интерфейс, необходимый для рисования.
//abstract base class class Graphical {
get_x();
get_y();
get_icon();
get_whatever();
};
Если вы обнаружите, что ваш рендеринг становится основанным на регистре, в зависимости от типа графика, я предлагаю перенести эти случаи наГрафика и рефакторинг для получения get_primitives_list()
, в котором необходимые примитивы возвращаются для возврата графическому (я предполагаю, что на каком-то уровне у вас есть основные примитивы, линии, круги, дуги, метки и т. Д.).
Я всегда обнаруживал, что ОО-анализ тратит ментальную энергию впустую и должен выполняться только для выполнения поставленной задачи.Ягни - это потрясающий принцип.