2012-03-12 9 views
1

私は、C++を使用して私たちの部門のビデオプレーヤーを開発しています。リーダー(データ・パケットを読み取るため)、プロセッサ(生データをデコード)、ディスプレイハンドル(画面上のデータを描く):C++のBlobアンチパターンについての質問

このビデオプレーヤーは、3つのコアモジュールがあります。彼らは密接に結合されたクラスではなく、彼らは彼らの仕事を独立して実行します。

しかし、これらの3つのモジュールとクライアントをインターフェイスするGUIモジュールがあります。これは、一時停止、続行、ビデオクリップ内の特定の場所へのジャンプなど、ユーザーからコマンドを取得します。このGUIモジュールは、上記の3つのモジュールにジョブを委譲します。 このGUIモジュールには、クライアントが対話する多くの機能が含まれているため、かなり大きくなります。しかし、私はこのGUIモジュールに実際の処理タスク(3つのコアモジュールで行われています)を行わせないように注意していますが、この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モジュールが記述された設計を使用して、「ブロブ」であることを私の懸念を明確にするために助けることができますか?それは再生モジュールのためだけの機能が豊富なGUIコントローラです - 私にはブロブのようにしていません

+2

大クラスは、必ずしもBlobのアンチパターンの使用を示すものではありません。時には、多くの機能を持つクラスが必要な場合もあります。コードやアーキテクチャの詳細な説明が表示されていなくても、言うことは難しいです。 「GUIモジュール」と言うと、少なくともビューとコントローラに分けていますか? – user1118321

+0

@ user1118321サンプルコードを追加しました。これは、クライアントと処理モジュールの間のインターフェイスを管理する管理クラスによく似ています。 – Scrathis

+0

は私にはよく見えます - しかし、裸のリーダーの代わりにスマートなポインタを使用します* – pm100

答えて

1

。 「設定」、「プラグイン管理」など、再生に関係のない追加の機能が詰まっていた場合は、ぼろぼろになります。

+0

これらの設定が必要な場合は、設定ハンドラをどこかに登録してGUIマネージャからボタンをクリックしてコールバックなどで委任する方がよいでしょう。 – Xeo

+0

私はまた、新しいGUIを再生するたびに、このGUIコントローラ内に初期化とモジュールのいくつかの設定を入れています。私はrumの時間の間に各モジュールが別のモジュールに見えないかもしれないが、何らかの方法で他のモジュールからの情報を必要とするかもしれないということをbczでやっています。これは適切なことですか? – Scrathis

+0

_any_コードなしで推測するのは難しいです:) – vines