2012-03-12 43 views
1

我正在爲使用C++的部門開發視頻播放器。關於C++中Blob反模式的問題

該視頻播放器有三個核心模塊:讀取器(用於讀取數據包),處理器(解碼原始數據),顯示處理(在屏幕上繪製數據)。他們不是緊密耦合的班級,這意味着他們獨立完成他們的工作。

但是,我有一個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」使用描述的設計?

+2

大類不一定表示使用Blob反模式。有時你需要一個具有很多功能的類。儘管沒有看到你的代碼或者你的架構的更詳細的描述,但很難說。當你說「GUI模塊」時,你是否將它分爲至少一個視圖和控制器? – user1118321 2012-03-12 18:33:00

+0

@ user1118321我添加了一些示例代碼。它更像是管理客戶端和處理模塊之間的接口的管理類。 – Scrathis 2012-03-12 18:47:04

+0

對我來說看起來不錯 - 但是我會使用智能指針而不是裸露的閱讀器* – pm100 2012-03-12 18:52:23

回答

1

這看起來不像一個blob - 它只是一個功能豐富的GUI控制器,用於播放模塊。但它會成爲一個blob,它是否充滿了與播放無關的附加功能,如「設置」,「插件管理」等。

+0

如果您需要這些設置,最好設置處理程序將其自己註冊到某個地方,然後從GUI管理器將其委託給那裏,並通過單擊按鈕上的回調或其他內容進行委派。 – Xeo 2012-03-12 19:27:21

+0

我還在每次新播放的開始時將此模塊的初始化和模塊配置放入此GUI控制器中。我這樣做bcz,每個模塊在朗姆酒時間可能對另一個模塊不可見,但他們需要來自其他模塊的信息初始化。這是一個合適的事情嗎? – Scrathis 2012-03-12 19:35:24

+0

如果沒有_any_代碼,很難猜出:) – vines 2012-03-12 21:12:34