Les grands projets Python évoluent souvent vers des bases de code complexes et difficiles à maintenir. Garder une trace des importations, des couches et de qui dépend de qui peut rapidement se transformer en désordre. Deply est là pour vous aider. Il analyse la structure de votre code et applique des règles architecturales, garantissant ainsi que votre projet Python reste propre, modulaire et facile à maintenir, même à mesure qu'il se développe.
La flexibilité de Python facilite l'introduction de code spaghetti si nous ne faisons pas attention. L'ajout de nouveaux modules, de décorateurs ou même la modification de la façon dont les classes héritent peuvent introduire de subtils problèmes de dépendance au sein des grandes équipes. Des limites claires, appliquées par des contrôles automatisés, contribuent à maintenir une qualité de code élevée. Cette approche booste la lisibilité et la productivité des équipes.
Deply est un outil autonome qui :
L'avantage de Deply est qu'il va au-delà des importations, en examinant les décorateurs, l'héritage de classe, les modèles de fichiers, etc. Sa configuration basée sur YAML facilite l'intégration dans les pipelines CI sans écrire de nouveaux fichiers de test.
pip install deply
Vous obtiendrez la dernière version, actuellement 0.5.2.
Créez un fichier deply.yaml à la racine de votre projet. Au minimum, définissez les chemins que vous souhaitez analyser, les fichiers à exclure, vos couches et vos règles. Vous trouverez ci-dessous un exemple d'extrait pour un projet de type Django.
deply: paths: - /path/to/your/project exclude_files: - ".*\.venv/.*" layers: - name: models collectors: - type: bool any_of: - type: class_inherits base_class: "django.db.models.Model" - type: class_inherits base_class: "django.contrib.auth.models.AbstractUser" - name: views collectors: - type: file_regex regex: ".*/views_api.py" ruleset: views: disallow_layer_dependencies: - models enforce_function_decorator_usage: - type: bool any_of: - type: bool must: - type: function_decorator_name_regex decorator_name_regex: "^HasPerm$" - type: function_decorator_name_regex decorator_name_regex: "^extend_schema$" - type: function_decorator_name_regex decorator_name_regex: "^staticmethod$"
Comment ça marche :
Une fois votre configuration prête, exécutez :
pip install deply
deply: paths: - /path/to/your/project exclude_files: - ".*\.venv/.*" layers: - name: models collectors: - type: bool any_of: - type: class_inherits base_class: "django.db.models.Model" - type: class_inherits base_class: "django.contrib.auth.models.AbstractUser" - name: views collectors: - type: file_regex regex: ".*/views_api.py" ruleset: views: disallow_layer_dependencies: - models enforce_function_decorator_usage: - type: bool any_of: - type: bool must: - type: function_decorator_name_regex decorator_name_regex: "^HasPerm$" - type: function_decorator_name_regex decorator_name_regex: "^extend_schema$" - type: function_decorator_name_regex decorator_name_regex: "^staticmethod$"
Toutes les classes de la couche service doivent se terminer par Service.
deply analyze
Toutes les fonctions des tâches doivent commencer par task_.
Conseil de pro : combinez plusieurs conditions avec bool pour former une logique avancée (must, any_of, must_not), garantissant ainsi la possibilité d'élaborer des règles très spécifiques.
Ajoutez une étape à votre pipeline CI :
service: enforce_class_naming: - type: class_name_regex class_name_regex: ".*Service$"
Votre pipeline peut échouer si des violations architecturales sont détectées.
Deply est conçu pour vous aider à détecter les violations architecturales avant qu'elles ne deviennent des refactorisations fastidieuses. En automatisant ces contrôles, vous pouvez conserver une conception claire et superposée, même au sein de grandes équipes.
N'hésitez pas à le tester et à ajuster la configuration selon vos propres besoins. Si vous avez des questions ou des idées, consultez le dépôt pour plus de détails sur le dépôt de problèmes ou la contribution. Bon codage !
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!