10
votes

Est-ce une dépendance circulaire?

est ce code un exemple de dépendance circulaire? XXX

Je sais que l'exemple est une mauvaise programmation, mais l'interface n'interdit pas la dépendance circulaire, en raison de la méthode de la valeur?


0 commentaires

3 Réponses :


3
votes

C'est un exemple vraiment génial. Je vais être joliment verbeux sur mon processus de pensée ici parce que je soupçonne qu'il y a une nommée stupide qui se passe.

paquets: feuille Expr

Contenu de la feuille:

  • feuille
  • Supersheet

    Contenu de Expr:

    • adresseexpr
    • Expr
    • adresse

      USAGES dans chaque:

      • adresseXPR - Expr, adresse, feuille
      • feuille - Supersheet, adresse

        Nous voyons que Adressexpr dépend de la feuille, qui se trouve dans le paquet de feuille. Une dépendance vers le bas.

        Nous voyons également que cette feuille dépend de l'adresse, dans le paquet EXPR.

        Par conséquent, vous avez une dépendance circulaire entre la feuille et les packages Expr. (Remarque: les outils peuvent le montrer. Je l'ai fait à la main parce que votre problème était assez abstrait. Regardez dans JDEPEND)

        En outre, je ne suis même pas sûr que j'ai jamais entendu parler d'une méthode de valeur. Si le compilateur peut donner une idée de l'utilisation d'une interface bidirectionnelle, cela fonctionnera. Il a le sens de démêler le désordre.


0 commentaires

2
votes

au moins au niveau du package. Package Feuille dépend de l'emballage Expr et inversement. Basé sur sa propre expérience - je le refactteur.


0 commentaires

6
votes

Je pense qu'il est plus facile de voir dans le diagramme de la classe. Comme vous pouvez le constater, il existe en effet une dépendance circulaire entre la feuille Classe de béton et Expr interface. Je ne dirais pas que c'est très mauvais parce que je considère que je considère la dépendance circulaire entre 2 classes de béton pour être le pire ... qui dit, il n'est certainement pas conseillé de le faire, si possible.

votre code

Entrez l'image Description ici

Donc, peut-être l'une des façons que vous pourriez envisager de refactoring est d'avoir votre adressexpr pour dépendre de supersheet au lieu de feuille et et et Expr Pour dépendre de supersheet au lieu de feuille : - xxx

... et ce sera Supprimer toutes les dépendances circulaires indésirables.

Code refactored possible

 Entrez la description de l'image ici

note : Je n'implique pas que c'est la solution. Je viens de dire que vous pouvez certainement regarder les moyens de refactoriser votre code pour minimiser ou supprimer des dépendances circulaires, car les dépendances circulaires rendent votre code difficile à tester un appareil. Le codage contre les interfaces aident toujours à éliminer les dépendances circulaires indésirables. Il facilite également votre code de test unitaire, car vous pouvez facilement se moquer d'objets.


1 commentaires

Ces diagrammes de classe sont géniaux. Quel outil avez-vous utilisé pour les générer?