Soirée. J'ai du mal à trouver un modèle de conception approprié pour certaines situations de composition profonde. Permettez-moi de présenter un exemple. Disons que nous avons une classe de type Corporation qui a beaucoup de classes de type Filiale qui ont beaucoup de classes de type Département qui dans le type contiennent plusieurs classes de type Unité qui à leur tour contiennent plusieurs classes de type Employé. Maintenant, supposons que le cas d'utilisation consiste à compter le nombre d'employés pour chaque société. Je pourrais boucler chaque corpration, boucle encore pour chaque filiale, et ainsi de suite, dans quelque chose qui se traduirait par une boucle imbriquée, 4 niveaux de profondeur. De plus, je violerais la loi de Demeter en référençant ma chaîne de classe à plusieurs niveaux en dessous, quelque chose qui est si étroitement coupé qu'il casserait le moment même où j'ai modifié ma chaîne.Composition de classe profonde et la loi de Demeter
Une autre chose que je pourrais faire est d'ajouter des tonnes (ok peut-être pas tonnes, mais quelques-unes) de références de raccourcis. Par exemple, une société peut elle-même contenir une liste d'employés qui ne doivent jamais passer par la chaîne pour les compter. De cette façon, les classes sont moins étroitement couplées (mais le sont-elles?) Et le problème consiste maintenant à maintenir la synchronisation de la liste des employés pour la Corporation et l'Unité. Je pourrais utiliser le modèle Observer pour les garder à jour, mais je pense vraiment que quelque chose ne va vraiment pas avec cette idée ou, à tout le moins, je n'utilise pas vraiment la meilleure solution. Comme je suis sûr que c'est un domaine extrêmement commun, quelqu'un pourrait-il être assez aimable pour me diriger vers un modèle de conception approprié?
Merci.
C'est ce que je suggérais en mentionnant les méthodes de raccourci. Cependant, si je devais mettre en place un countEmployees(), je devrais avoir, disons, un tableau d'employés, non? Ce qui devrait essentiellement être le même tableau d'employés que la classe Unit contiendrait. Et je devrais les synchroniser, probablement avec un pattern Observer. Est-ce ce que vous suggérez aussi? – ctsag
Personne dont la propriété est Employés? Est-ce de l'unité? Ensuite, vous aurez besoin de faire des méthodes de raccourci pour les filiales, qui à leur tour appellent la méthode de raccourci de l'unité qui contiendrait des employés. Vous n'avez pas besoin d'extraire les employés de la classe d'unité. –
Ainsi, chaque méthode dans une chaîne de classe séquentielle contiendrait une méthode countEmployees() qui appelait la méthode counteEmployees() de la classe suivante. C'est logique je suppose, en ce sens que je peux compter les employés à n'importe quel niveau de la chaîne que je veux. J'aime cette approche, merci pour votre contribution Narendra. Au fait, comment appelleriez-vous ce principe? Est-ce [Tell, ne demandez pas] (http://pragprog.com/articles/tell-dont-ask)? – ctsag