J'ai vu à SOLID Il existe un principe principe d'inversion de dépendance.
J'ai également vu que: les classes de haut niveau ne doivent pas dépendre des classes de bas niveau, mais les deux devraient dépendre des abstractions.
Quels moyens exactement haut nivea classes et de bas nivea classes?
Les classes de faible niveau sont les travailleurs simples qui effectuent des actions, tandis que les classes de haut niveau sont la classe de gestion qui orchestrent les classes de faible niveau.
Par exemple, si vous avez une classe qui lit des octets d'un fichier et une classe qui calcule la CRC des octets, ce sont des classes de faible niveau car chacun effectue une action. Si vous avez une classe qui utilise ces deux classes pour calculer le CRC d'un fichier, c'est une classe de haut niveau, car elle exploite les autres classes pour accomplir une tâche plus importante.
DIP dit que la classe de haut niveau ne doit pas dépendre directement sur les classes de faible niveau, mais plutôt obtenir des objets de ces classes (ou des objets d'usine qui les créent) injectés et dépendent d'interfaces plus génériques - par exemple une interface pour les classes que lire des octets et une interface pour les classes qui ont globalement des octets. Que la classe de niveau supérieur, au lieu de simplement faire CRC sur des fichiers, il pourrait également faire le MD5 sur les URL ou tout autre type d'agrégation sur tout autre type de source de données.
Gardez à l'esprit qu'il n'y a plus que deux niveaux. La classe de haut niveau de l'exemple peut être une composante de niveau basse pour une classe de niveau encore plus élevée, qui effectue une tâche plus complexe.
Une autre chose à garder à l'esprit est que, comme une autre règle, la trempette ne doit pas être suivie aveuglément. J'ai expliqué dans une autre réponse que certaines classes de bas niveau sont trop petites pour être dignes de découplement. En outre, à un moment donné, vous devrez faire référence à des classes de bas niveau directement à partir de classes de haut niveau. Les classes de haut niveau qui obtiennent des objets de faible niveau injectés à eux - qui fait l'injection? Même des classes de niveau supérieur! Cela signifie que dans certains points, les classes de haut niveau doivent utiliser directement des classes de bas niveau. Votre méthode principale est la plus élevée qu'il y ait, et vous ne pouvez rien injecter. Cela ne signifie pas que vous devriez faire toute l'injection dans la méthode principale - décider où choisir les classes de béton basse fait partie du processus de conception.
J'aime beaucoup l'explication dans cet article: plonger dans la nature .
Pour résumer le niveau de haut niveau et de faible niveau sont en relation avec le modèle de domaine. Par exemple, la création de rapports est de haut niveau tout en obtenant des données pour ce rapport et l'impression de ces données sont des opérations de bas niveau.