このオブジェクトの作成に関連するすべてのロジックを非表示にするために、オブジェクトから派生させるのは、この優れた/受け入れ可能なプラクティスです。コンポジションをカプセル化するために継承を使用する
たとえば(完全な例ではありませんが)私はSceneクラスを持っています。いくつかのエンティティ、いくつかのシステムで初期化したい、背景色を設定するなど。 私はFactoryを作成することができましたが、代わりに派生クラスのコンストラクタですべてを行うことを選択しました。これに代えて
:
var scene = new Scene();
scene.Systems (new ColisionSystem);
scene.Systems (new MovementSystem);
scene.SceneGraph = new MyCustomSceneGraph();
私はこれを行う:
class MyScene : Scene
{
void MyScene(SceneGraph sceneGraph)
{
this.Systems (new ColisionSystem);
this.Systems (new MovementSystem);
this.SceneGraph = sceneGraph;
}
}
var scene = new MyScene(new MyCustomSceneGraph());
は、だから私はコンストラクタですべてのこと作成のものを隠していると私はすべてのシーンのために別のファイルを得たボーナスとして、私が作成されます。 。
他の方法で。シーンエディタを作成した場合、これが問題になる可能性があります。その場合、シーンオブジェクトのクライアントはシーン自体ではなく、シーンを準備する責任がある必要があるためです。
これは受け入れられる練習ですか、それともSRPに違反していますか?
私には非常に良い継承の使用のように見えません。なぜあなたのためにすべてを行う静的メソッドを作成していないのですか?私はここで継承を使うことに何の恩恵も見ません。あなたは何の振る舞いも特化していないし、状態を追加していないからです。 –
一般的には、[継承上の合成](https://en.wikipedia.org/wiki/Composition_over_inheritance)を選択する必要があります。 – Steven
@Steven OPのクラスの構造は、彼がすでに継承を超えた構成を好むことを示唆しています。彼の質問は継承を使用して構成を構成する妥当性についてのものだと私は考えています。 – dasblinkenlight