Est-ce une pratique bonne/acceptable de dériver de l'objet uniquement pour masquer toute la logique liée à la création de cet objet? .Utilisation de l'héritage pour l'encapsulation de la composition
Par exemple (bien que n'étant pas un exemple parfait) j'ai une classe Scene. Je veux l'initialiser avec certaines entités, certains systèmes, définir la couleur d'arrière-plan et ainsi de suite. Je pourrais créer Factory pour cela mais j'ai choisi de faire tout ça dans le constructeur de la classe dérivée.
Au lieu de cela:
var scene = new Scene();
scene.Systems (new ColisionSystem);
scene.Systems (new MovementSystem);
scene.SceneGraph = new MyCustomSceneGraph();
Je fais ceci:
class MyScene : Scene
{
void MyScene(SceneGraph sceneGraph)
{
this.Systems (new ColisionSystem);
this.Systems (new MovementSystem);
this.SceneGraph = sceneGraph;
}
}
var scene = new MyScene(new MyCustomSceneGraph());
Je me cache tout ce genre de choses de la création dans le constructeur et comme un bonus, je suis arrivé fichier séparé pour chaque scène je vais créer .
Dans l'autre sens. Si jamais je crée un éditeur de scène, cela peut poser problème. Parce que dans ce cas, le client de l'objet scène devrait être responsable de la préparation de la scène, et non la scène elle-même.
Est-ce une pratique acceptable ou est-ce que cela constitue une violation de la SRP?
Cela ne me semble pas être un très bon usage de l'héritage. Pourquoi ne pas simplement créer une méthode statique pour faire tout cela pour vous? Je ne vois aucun avantage à utiliser l'héritage ici, car vous ne spécialisez aucun comportement ou ajoutez plus d'état. –
En général, vous devriez préférer [Composition over Inheritance] (https://en.wikipedia.org/wiki/Composition_over_inheritance). – Steven
@Steven La structure des classes d'OP suggère qu'il préfère déjà la composition à l'héritage.Je pense que sa question porte sur la validité de l'utilisation de l'héritage pour la composition * configure *, ce qui, à mon avis, a des implications négatives. – dasblinkenlight