dans mon application, j'ai un contrôleur J'ai lu sur les objets de Dieu, mais je ne connais pas vraiment d'une façon de la diviser. Si je séparais l'interprète et le répartiteur dans le bot, il va faire une chaîne d'appels horrible (quelque chose comme Le problème est que la classe BOT est de 2000 lignes (probablement plus courte si je sortitais les commentaires Javadoc) et que le bot est d'environ 1000 lignes de long. Beaucoup de lignes = objet de Dieu. Mais est-ce que ça va pour une ou deux classes principales d'un projet? p> code> qui est démarré par la méthode principale. Le contrôleur initialise les crochets, les connexions de base de données, l'interface utilisateur, une autre connexion et d'autres choses. Il tient la majeure partie de l'état du programme (non, ce n'est pas un singleton). Dans un autre exemple, il existe un contrôleur pour le bot qui gère l'interprétation et l'envoi de commandes. Les deux sont des fichiers assez volumineux. P>
getbot (). GetPargot (). Getoutput (). SendMessage (destinataire, message) code>). De la même manière dans le premier contrôleur Si je divisions les choses, vous aurez simplement des objets de données contenant des champs et des méthodes d'utilité alias. Les diviserait tout simplement aggraver les choses. Et avant de supposer que son immeuble, ce n'est en fait pas. Je n'ai même pas écrit le contrôleur de bot, mais je sais toujours ce qui se passe. p>
4 Réponses :
Si vous êtes mal à l'aise avec la taille et la complexité d'une classe, il s'agit généralement d'un bon indicateur qu'un meilleur design pourrait être fait. Mais ne mesurez pas simplement la taille. Si une classe est facile à comprendre et à suivre, mais contient beaucoup de code, cela ne signifie pas nécessairement que c'est un candidat à la ré-factorisation. J'ai vu que les gens sont emportés avec ceci et le désordre qu'ils créent dans la poursuite de la fabrication de petites choses étaient très pires que le code d'origine. D'autre part, j'ai lu des cours de bout à bout de fois et je n'avais toujours aucune idée de ce qu'ils font. p>
La question que je demanderais est - si je l'ai donné à un autre développeur, pourriez-ils pouvoir facilement comprendre et le maintenir? p>
Si la réponse est oui, alors que vous n'avez pas besoin de faire quoi que ce soit. Sinon, alors une nouvelle factorisation est en ordre. P>
En référence aux objets de Dieu, lisez votre message, il semble que cette classe fait trop. Je me demande si d'abord, vous pourriez récupérer l'état dans un ensemble d'objets de modèle comme point de départ. Ensuite, votre classe commence à ressembler davantage à une installation de configuration d'une sorte. P>
"Beaucoup de lignes" ne signifie pas que la classe est un objet dieu du tout, c'est un terrible référence terrible pour déterminer si vous devez ou non refacturer quelque chose. Certaines choses sont très compliquées et garantissent un objet compliqué et intrinsèquement important. L'idée d'un objet de Dieu est ce que la classe Par exemple si j'ai fait un objet qui pourrait p> l'objet serait admissible En tant qu'objet de Dieu, même s'il ne s'agissait que de 100 lignes de code. L'idée de base est que toutes ces réponses sont totalement indépendantes (dans l'extrémité logique de l'entreprise du spectre), alors pourquoi dans le monde feraient tous partie du même objet. Si j'ai décidé de faire durer des câlins plus longtemps, je pourrais finir de baiser mes impôts. Entrez l'IRS. P> Toutefois, si vous travaillez sur un simulateur de physique, disons, et la classe classique () Code> aurait des méthodes / objets tels que: P>
Space()
Time()
Velocity()
Speed()
Mass()
Acceleration()
Gravity()
Force()
Impulse()
Torque()
Momentum()
AngularMomentum()
Inertia()
MomentOfInertia()
ReferenceFrame()
Energy()
KineticEnergy()
PotentialEnergy()
MechanicalWork()
VirtualWork()
DAlembertsPrinciple()
Bonne réponse. En suivant ce principe, mon objet est juste complexe car il gère à la fois l'analyse, la sortie et les crochets (bien que les crochets se déplacent). Merci d'avoir répondu
Je suggérerais que le moteur de physique / mouvement devrait certainement être séparé de l'interprète de la langue; Bien que l'interprète linguistique aura besoin d'un accès à certaines des méthodes publiques et des propriétés du moteur de physique, il n'y a aucune raison que les deux aspects du robot devraient être dans la même classe. L'interpréteur de langue lui-même pourrait être subdivisé en quelques classes, de même que le moteur de mouvement. Il peut y avoir un objet de maîtrise, mais il devrait avoir une quantité relativement petite de code. Il, le moteur de mouvement principal et le moteur de langue principale, devraient tous déléguer la plupart de leurs travaux aux objets qui les composent. P>
Je pense que le principe clé ici est "cohésion". .. n'est pas cohérent. p> quelque chose comme: p> GiveMeHug()
GiveMeKisses()
GiveMeHugs(int noOfTimes)
GiveMeHugs(int noOfTimes, Person person)
GiveMeHugsAndKisses()
Connexe: Conception d'un classe de manière à ce qu'il ne devienne pas un "objet de Dieu"
@JleeDev J'ai regardé cela, mais c'est un peu un problème différent. L'OP peut-il avoir fait que des sous-objets aient fait le travail bien, car il était tout interne. Mon cas est cependant un contrôleur d'API au public qui doit rester simple où je ne peux pas faire d'autre objet faire le travail.