【发布时间】:2012-03-12 18:27:17
【问题描述】:
我正在使用 C++ 为我们部门开发视频播放器。
这个视频播放器有三个核心模块:Reader(用于读取数据包),Processor(解码原始数据),Display Handle(在屏幕上绘制数据)。它们不是紧密耦合的类,这意味着它们可以独立地执行工作。
但是,我有一个 GUI 模块,用于连接这三个模块和客户端。它将检索用户的命令,例如暂停、继续、跳转到视频剪辑中的特定位置。然后,此 GUI 模块会将作业委托给上述三个模块。 结果,这个 GUI 模块变得相当大,因为它包含许多客户端将与之交互的功能。不过,我真的很小心,我不让这个 GUI 模块做任何真正的处理任务(它们是在三个核心模块上完成的),我担心这个 GUI 模块会成为一个上帝对象或“Blob”,这是一个反- 面向对象设计中的模式。
这是此处 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”的担忧吗?
【问题讨论】:
-
一个大类不一定表示使用 Blob 反模式。有时你需要一个具有很多功能的类。但是,如果没有看到您的代码或更详细的架构描述,就很难说。当您说“GUI 模块”时,您是否将其至少分为视图和控制器?
-
@user1118321 我添加了一些示例代码。它更像是一个管理类,用于管理客户端和处理模块之间的接口。
-
对我来说看起来不错 - 但是我会使用智能指针而不是裸阅读器*
-
@pm100 我实际上在这里使用 QScopedPointer,因为整个应用程序是基于 Qt 框架的。只是为了简单起见。
-
我同意@pm100。考虑到您发布的内容,我觉得很好。
标签: c++ design-patterns blob anti-patterns