Bonjour à tous,
je ne suis pas sur que le titre soit approprié, je m’interroge sur une pratique à laquelle je suis confronté.
Je travaille sur une base de code existante sur un projet Flutter et son organisation me perturbe un peu… Les différents aspects métiers y sont regroupés dans des librairies (Packages).
Personnellement je n’ai jamais fait comme cela, je créé des librairies selon des critères fonctionnels (composants), mais j’ai l’habitude de gérer mes modules dans le corps de l’application. Selon le besoin j’ai défini des interfaces pour ces modules, mais je réserve les packages pour y grouper du code qui est utile dans différentes partie de mon application.
Il y a probablement des aspects qui m’échappent sur ces questions, mais j’aimerais vraiment avoir vos avis ? Il y a-t-il un bénéfice à encapsuler un module dans un package ? avez vous déjà fait ou vu cela ? Pour moi cela ajoute de la complexité et rend difficile la gestion des dépendances transverses.
Bonne journée
Denis
Bonjour @Denis,
Alors oui, encapsuler un module dans un package est une bonne pratique de programmation qui présente de nombreux avantages (meme si, comme tu l’as déjà remarqué, cela complique parfois un peu le code).
Basé sur la Clean Architecture (je recommande fortement le nouveau cours de Maxime « Maîtrisez la Clean Architecture »), c’est tout aussi faisable en « monolithic architecture »… probablement plus un choix de separation faite par l’organisation pour une future extensibilité.
Un lien qui explique bien les microservices, en se basant sur flutter (en anglais) :
https://applover.com/blog/modular-codebase-in-flutter-should-you-split-your-project-into-packages/
Organisation du code :
- Structure : Les packages permettent de regrouper des modules logiquement liés, ce qui facilite la compréhension et la navigation dans le code.
- Hiérarchie : On peut créer une hiérarchie de packages pour refléter l’organisation du code.
- Réutilisabilité : Les packages facilitent la réutilisation de modules dans différents projets.
Contrôle d’accès :
- Visibilité : On peut contrôler la visibilité des membres d’un module (public/privé) pour limiter l’accès aux éléments internes.
- Encapsulation : Qui permet de masquer les détails d’implémentation d’un module et de ne fournir qu’une interface publique.
- Sécurité : Cela permet de renforcer la sécurité du code en empêchant la modification accidentelle ou malveillante des données internes.
Dépendances et gestion de versions :
- Dépendances : Les packages permettent de gérer les dépendances entre modules de manière claire et précise.
- Versions : On peut facilement gérer différentes versions d’un même module et contrôler les dépendances de version.
- Compatibilité : Assure la compatibilité entre différents modules et garanti que le code fonctionne correctement.
Maintenance et testabilité:
- Maintenance : Les packages facilitent la maintenance du code en regroupant les modules liés.
- Tests : Permet de facilement tester des modules isolés en les encapsulant dans des packages.
- Bugs : L’encapsulation facilite le debug du code en limitant le nombre de modules à examiner.
Cedric
Bonsoir Cedric,
Merci pour ta réponse très intéressante et détaillée, le lien est super intéressant, je vais le lire attentivement pour y réfléchir.
Denis
Effectivement le lien est très intéressant, et m’a permit de découvrir Melos ! merci beaucoup
Cela me permet au passage de mieux reformuler ma question, depuis que je me suis mis à Flutter j’ai utilisé des packages essentiellement pour du découpage « Per Features » et j’ai découpé mes applications « Per Layer » avec des dossiers. En fait je pense que cela vient du fait que j’ai bossé sur des projets où il avait été choisi de créer une série d’applications qui avaient chacune un domaine fonctionnel bien définit. Melos apporte une notion de Workspace comme sous iOS, et apparement pas mal d’outils pour gérer tout cela. En tout cas, merci encore je voulais initier une reflexion pour peser le pour et le contre, c’est parfait
Parfait ! Content d’avoir pu t’aider