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
};

とにかく、私はMVCを使用しており、コントローラーがIShipオブジェクトを操作し、それらがコンポジットであるかリーフであるかに応じて、いくつかの機能を実行します。私の質問は、別のインターフェイスを取得するためにIShipからSim_objectに移動する必要がある場合があります(dynamic_castが必要です)。これは悪い設計/実践と見なされますか?Sim_objectコマンドにアクセスするためだけに、IShipインターフェイスを汚染したくありませんでした。

4

1 に答える 1

0

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

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

于 2012-06-13T19:13:13.523 に答える