Maison >développement back-end >Tutoriel Python >Rendre les CLI Python plus maintenables : un voyage avec le chargement dynamique des commandes
Cet article de blog détaille une amélioration récente de l'interface de ligne de commande (CLI) de notre projet HyperGraph : un système de chargement de commandes dynamique. Initialement, l'ajout de nouvelles commandes CLI était un processus manuel en plusieurs étapes, violant les principes DRY et le principe ouvert/fermé.
Le défi : enregistrement manuel des commandes
Ajout d'une nouvelle commande impliquée :
__init__.py
.C'était fastidieux, sujet aux erreurs et nécessitait de modifier le code existant pour chaque nouvelle fonctionnalité, ce qui était loin d'être idéal.
Explorer les solutions : automatisation ou chargement dynamique
Deux solutions ont été envisagées :
Bien qu'un script d'automatisation semblait plus simple au départ, il ne traiterait que les symptômes, pas le défaut de conception sous-jacent.
La solution : découverte dynamique des commandes
La solution choisie était un système de chargement dynamique qui enregistre automatiquement les commandes. Le code de base est :
<code class="language-python">async def load_commands(self) -> None: implementations_package = "hypergraph.cli.commands.implementations" for _, name, _ in pkgutil.iter_modules([str(self.commands_path)]): if name.startswith("_"): # Skip private modules continue module = importlib.import_module(f"{implementations_package}.{name}") for item_name, item in inspect.getmembers(module): if (inspect.isclass(item) and issubclass(item, BaseCommand) and item != BaseCommand): command = item(self.system) self.registry.register_command(command)</code>
Cette approche offre plusieurs avantages :
implementations
.Principales leçons apprises
CommandRegistry
originales garantit que le code existant continue de fonctionner.Un revers mineur
Un problème mineur est survenu avec une importation de type manquante (Any
depuis typing
), soulignant l'importance d'une indication de type approfondie en Python.
Étapes futures
Bien que le système dynamique soit implémenté, un script d'automatisation reste une possibilité en tant qu'outil de développement pour générer des modèles de fichiers de commandes. Les projets futurs incluent :
Conclusion
Cette refactorisation démontre les avantages de réévaluer les approches pour des solutions plus élégantes. Bien qu’il nécessite plus d’effort initial qu’une solution rapide, le résultat est un code plus maintenable, extensible et pythonique. Donner la priorité à la maintenabilité à long terme simplifie le développement futur.
Balises : #Python #Refactoring #CleanCode #CLI #Programming
Pour des informations techniques détaillées, reportez-vous à notre référentiel Codeberg.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!