Вопросы об анти-паттерне Blob в C ++ - PullRequest
1 голос
/ 12 марта 2012

Я разрабатываю видеоплеер для нашего отдела с использованием C ++.

Этот видеоплеер имеет три основных модуля: Reader (для чтения пакетов данных), Processor (декодирование необработанных данных), Display Handle (рисование данныхна экране).Они не являются тесно связанными классами, что означает, что они выполняют свою работу как бы самостоятельно.

Однако у меня есть модуль GUI, который связывает эти три модуля и клиент.Он будет получать команды от пользователя, такие как пауза, продолжить, перейти к определенному месту в видеоклипе.Этот модуль GUI затем делегирует задания трем модулям, упомянутым выше.В результате этот модуль GUI становится довольно большим, поскольку содержит много функций, с которыми клиент будет взаимодействовать.Хотя, опять же, я очень осторожен, что не позволяю этому модулю GUI выполнять какие-либо реальные задачи обработки (они выполняются на трех основных модулях), я боюсь, что этот модуль GUI становится объектом God или «Blob», который является анти-pattern в объектно-ориентированном дизайне.

Вот пример объявления для модуля GUI здесь:

class CorePlayer
{
public:
   CorePlayer();
   ~CorePlayer();

public:
   void start();
   void pause();
   void continue();
   void jumpToFrame(int frameNum);
   void toggleFullScreen();
   .........
private:
   Reader* rModule_;
   Processor* pModule_;
   DisplayHandle* dspHandle_;
}

В ........ есть намного больше функций ........площадь.Это функции, которые нужны людям для медиаплеера.Они не выполняют реальную обработку, они делегируют задания модулям.

Может ли кто-нибудь помочь прояснить мои опасения, что этот модуль GUI является «BLOB-объектом», используя описанную конструкцию?

1 Ответ

1 голос
/ 12 марта 2012

Для меня это не похоже на каплю - это просто многофункциональный графический интерфейс контроллера для модуля воспроизведения.Однако он превратился бы в блоб, если бы в него были добавлены дополнительные функции, не связанные с воспроизведением, такие как «Настройки», «Управление подключаемыми модулями» и т. Д.

...