Quel pattern design adopter

a marqué ce sujet comme résolu.

Bonjour,

J’ai une idée d’application que j’aimerai développer mais je bloque depuis deux jours sur comment je vais construire mon code.

J’ai différents composants (system, element, subsystem, equipment) qui constituent un arbre :

system/
├─ element/
│  ├─ subsystem/
│  │  ├─ equipment/
│  │  ├─ equipment/
│  ├─ subsystem/
│  │  ├─ equipment/
├─ element/

Un system peut avoir plusieurs element, qui lui peut avoir plusieurs subsystem, qui lui peut avoir plusieurs equipment. Tous ces composants ont en commun des attributs et des méthodes.

Tous ces composants implémentent en plus des "comportements". Par exemple un premier comportement serait la position et l’orientation, qui serait implémenté par tout le monde. equipement aurait le plus de comportement comme la masse ou la géométrie (ces comportements sont justes pour le composant equipment).

element vient rajouter une difficulté : on peut lui définir des modes de foncitonnement. Pour chaque mode, la liste de ses composants ne change pas. Par contre les valeurs des comportements implémentés par ses enfants peuvent changer.

Je ne connais pas très bien l’ECS, mais je sens que ça serait le design pattern le plus adapté à mon projet. Seulement, je ne vois pas très bien comment gérer le système de mode.

Autre question, je souhaite sauvegarder cet arbre. Mon application utilise SQLite pour la gestion des utilisateurs et des droits. Sauf que je me vois mal sauvegarder un tel arbre en base de données non ? La façon la plus propre serait-il d’avoir une entrée dans ma base de donnée pointant vers un fichier XML décrivant l’arbre et les différentes valeurs de chaque comportement ?

Merci pour vos réponses et bonnes fêtes de fin d’année.

+0 -0

Salut,

Je ne connais pas très bien l’ECS, mais je sens que ça serait le design pattern le plus adapté à mon projet. Seulement, je ne vois pas très bien comment gérer le système de mode.

C’est typiquement le genre de truc que l’ECS va gérer par construction si tes composants (au sens de l’ECS) sont assez fins. Si la structure en arbre elle-même est encodée sous forme de composants des entités que tu manipules, le système (toujours dans le sens des ECS, pas ce que tu appelles system) "je change le mode de fonctionnement" n’a plus qu’à propager ça aux enfants de l’entité qui vient de changer de mode.

EDIT : pour la question de la sauvegarde, n’importe quel moteur ECS un peu mûr propose ça. Je dirais que t’as même pas besoin de modifier la base de données que tu as déjà, tu peux en faire une ressource externe du moteur d’ECS.

+0 -0

EDIT : pour la question de la sauvegarde, n’importe quel moteur ECS un peu mûr propose ça. Je dirais que t’as même pas besoin de modifier la base de données que tu as déjà, tu peux en faire une ressource externe du moteur d’ECS.

adri1

Je programme mon application en Ada, je n’ai malheureusement pas trouvé de moteur ECS déjà tout fait, donc je vais devoir faire mon implémentation.

Qu’entends-tu par "tu peux en faire une ressource externe du moteur d’ECS" ?

Si t’es obligé d’utiliser Ada, ça risque d’être compliqué. Implémenter un moteur ECS n’est tout de même pas une mince affaire et tu peux avoir intérêt à utiliser un pattern plus "traditionnel". Je connais pas Ada de suffisamment près pour avoir une idée de ce qui pourrait bien s’exprimer avec.

Qu’entends-tu par "tu peux en faire une ressource externe du moteur d’ECS" ?

C’était surtout avec l’idée en tête que tu as un moteur ECS qui permet typiquement d’injecter des ressources externes quelconques (que ce soit une bête struct avec quelques données statiques ou bien un truc plus élaboré qui va lire dans une DB) dans tes systèmes. Si ta DB contient les permissions pour faire certaines opérations, les systèmes qui gèrent ces opérations pourraient simplement interroger la DB via cette ressource pour autoriser ou non l’opération. Une autre solution moins élégante et probablement assez casse-gueule est d’injecter les permissions comme components de tes entités.

+1 -0

Je reviens quelques jours plus tard, bonne année à tous. :)

Sur tes bons conseils @adri1 j’ai fait un petit moteur ECS : https://github.com/louis-etne/ada-generic_ecs

Il n’est pas parfait, très simple et surement pas optimisé mais il a l’avantage de fonctionner et de ne pas être intrusif. C’était très instructif en revanche (et Ada est vraiment très élégant).

Merci pour ton aide ! Je vais continuer à jouer avec ça.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte