2012-04-14 9 views
1

私は周りを探索してきましたが、これについてはあまり見つけられませんでしたが、あるインタフェースから別のインタフェースへのクロスキャストは悪い設計と見なされますか?ここで私が使用しているコードのサンプルです:クロスキャストは、別のインターフェイスを取得するには、悪い設計と考えていましたか?

class IShip { 
    // strictly ship_like interface 
    // i.e. move, attack, dock, etc. 
}; 

class Sim_object { 
    // all game objects are derived from this and represents component in composite pattern 
    // get_name() 
    // get_location() 
    // add 
    // remove 
    // etc. 
}; 

template<typename T> 
class Group : public Sim_object { 
    // composite functions 
    // add 
    // remove 
    // display 
    // map<T> container; 
}; 

class Ship_group : public Group<IShip>, public IShip { 
    // added IShip functionality 
}; 

class Ship : public Sim_object, public IShip { 
    // actual ship object 
}; 

をとにかくが、私は彼らがコンポジットや葉であれば、私のコントローラはIShipオブジェクトを操作し、依存しますMVCを使用している、いくつかの機能を実行します。私の質問は、私は別のインターフェイス(dynamic_castを必要とする)を得るために、私はIShipからSim_objectに行く必要がある時です。これは悪いデザイン/練習と見なされますか?私は本当にSim_objectコマンドにアクセスするためにIShipインターフェイスを汚染したくはありませんでした。

答えて

0

キャスティングは、一般に、キャストされたタイプがそのコンテキストで既に認識されていない限り、悪いデザインを意味します。たとえば、インタフェースITextureで表されるテクスチャを描画するインターフェイスIRendererがあり、OpenGLRendererとOpenGLTextureを持つOpenGLの実装がある場合、OpenGLRendererでOpenGLTextureにITextureをキャストすることは設計上の問題ではありません。

実際にIShipをSim_objectにキャストする必要がある場合は、実際にはSimhipをSim_objectと考えるのが妥当でしょう。

関連する問題