Voici une autre question liée à une question que j'ai posée il y a quelques minutes. Si j'ai une classe qui, je crois, n'a qu'une responsabilité mais beaucoup de règles métier et que cette classe est grande, environ 4000 lignes ou plus, est-ce correct de ne pas factoriser la classe en plusieurs classes.Règles du refactor de grande classe
Répondre
Une classe de 4 000 lignes n'est pas très facile à maintenir. Il pourrait être difficile de tester des parties de la logique isolément. Une raison plus pratique pour la scinder est que plusieurs programmeurs peuvent travailler en parallèle si elle est séparée en plusieurs classes. C'est beaucoup plus difficile à faire si c'est une classe.
Vous perdez beaucoup de bons attributs de qualité logicielle en laissant cela comme un monstre monolithique. Il y a de meilleurs modèles pour réduire sa complexité interne, même si tout est vraiment cohérent.
Je dirais "non". 4 000 lignes est beaucoup trop grande.
Je voudrais examiner les règles de gestion pour voir si elles n'impliquent pas que la classe est vraiment composite. En particulier, s'il est possible de partitionner l'ensemble de règles métier en sous-ensembles sensibles, il est probable que chaque sous-ensemble indique que votre classe doit être divisée en composants, chacun avec son propre ensemble de règles métier, et que les règles doivent être morcelé parmi les composants.
Je considérerais également la refactorisation des règles métier dans une représentation plus compacte.
Le plus gros problème que j'ai avec la rupture est que toutes mes méthodes utilisent les mêmes variables. Ne devraient-ils pas rester dans la même classe alors? – user204588
Vous voulez vous battre pour ceci: http://en.wikipedia.org/wiki/Law_of_Demeter – Mike
@user: ils utilisent _all_ les mêmes variables? Vous avez des problèmes. Combien de ces variables se réfèrent à d'autres objets? La nécessité de se référer au même ensemble d'objets externes n'indique pas que ces méthodes appartiennent ensemble. –
4000 lignes c'est trop. Soit vous avez 500 méthodes ou vous avez des méthodes vraiment longues. Je ne peux pas voir un moyen qui peut être gérable. Cela semble évident mais je vous suggère de commencer par regrouper des méthodes/variables similaires. par exemple. toutes les données de coût vont dans la classe productCost etc. à la place. Utilisez des méthodes de requête au lieu des champs calculés qui sont utilisés par de nombreuses méthodes.
- 1. Android InflateException sur refactor de la classe
- 2. Refactorisation d'une grande classe
- 3. ruby / datamapper: Méthodes de classe Refactor au module
- 4. Rupture d'une grande classe Hibernate
- 5. Javascript refactor
- 6. Renommer une classe dans Xcode: Refactor ... est grisé (désactivé). Pourquoi?
- 7. Règles d'accès du constructeur
- 8. ASP.NET MVC - Autorisation Refactor
- 9. refactor XML avec XSL
- 10. Refactor à n-tier
- 11. refactor help - pattern de stratégie
- 12. apache modrewrite refactor question
- 13. Asp.net - Action Refactor
- 14. petit code python refactor
- 15. Refactor HTML avec CSS
- 16. Comment faire pour casser une grande classe
- 17. Rails3 - refactor redirect appel
- 18. Refactor Django modèle forloop
- 19. Règles du portail Web globales et règles d'accessibilité?
- 20. Règles du pouce dans GDI +
- 21. Dimensionnement du matériel - Règles du pouce
- 22. conditions refactor dans haml view
- 23. Refactor packages dans un Jar
- 24. Refactor code en utilisant l'instruction
- 25. Refactor avec une programmation dynamique?
- 26. Code commun du refactor C++ avec une instruction différente
- 27. Refactor Html.DropDownList source de données asp.net mvc
- 28. Aide refactor module de rapport personnalisé hérité
- 29. Quelles sont les règles d'appel du constructeur de la superclasse?
- 30. Refactor ce code ... méthode Controls.Find
4000 lignes semble WAY plus d'une responsabilité. Décrivez ce qu'il fait en une phrase. –
Cette classe convertit les données produit en fonction des paramètres utilisateur. – user204588
Il y a beaucoup de nombreux paramètres pour l'utilisateur à choisir et je dois les comptabiliser tous. – user204588