J'ai vu quelques questions sur ce modèle, mais j'essaie d'en savoir plus sur ce modèle de conception en profondeur. Toutes les ressources à cet égard, les commentaires des experts sur les scénarios qu'ils ont tendance à utiliser ce modèle et quels scénarios à éviter et quelques exemples du monde réel seront vraiment utiles à cet égard. Je ne cherche pas ce qui est de type COR mais quelques commentaires avancés d'experts. Cela m'aidera beaucoup à appliquer ce modèle de façon plus responsable la prochaine fois.motif de conception de la chaîne de responsabilité - regd
Répondre
Ok, tout récemment, j'ai une certaine expérience avec ce modèle dans le développement de la vraie entreprise.
Dans notre système, nous avions différents niveaux de stockage (dans l'ordre de préséance): base, spécifique au produit et spécifique à l'utilisateur. Chaque stockage contenait un ensemble de fichiers XML qui décrivaient en métalangage les éléments à afficher sur une page Web. Chaque fichier XML décrit la page entière à afficher.
Lorsque l'utilisateur a essayé de naviguer vers une page Web, notre système a effectué une recherche dans les stockages du fichier XML nécessaire en ce qui concerne l'ID de page.
La recherche s'est terminée lorsque le fichier nécessaire a été trouvé, aucun algorithme de fusion n'était attendu (aucune fusion entre les couches).
Donc, pour cette situation particulière, nous avons mis en place une interface avec 1 méthode (en pseudocode):
ViewMetadata GetViewMetadata(string viewId);
Nous avons simplement construit une chaîne de stockage - implementors de cette interface. Le HttpHandler (pour Asp.Net usecase) qui était responsable de la construction de la représentation HTML réelle à partir des métadonnées de vue XML avait un seul point d'entrée pour rechercher un mécanisme: une instance de l'implémenteur d'interface mentionné.
Tout semblait être OK (pendant plusieurs mois en fait). Mais
Nouvelle exigence est venue. Cette exigence concernait la "promotion": le fichier XML dans certaines circonstances ("workflow de promotion") doit être transféré du stockage de l'utilisateur au stockage du produit. En fait, en raison de notre implémentation trop abstraite du mécanisme de recherche, nous ne pouvions pas gérer cette exigence - il n'y avait qu'un seul point d'entrée abstrait pour le gestionnaire de la chaîne entière des stockages. Par conséquent, nous avons rejeté le motif CoR pour cette exigence. Maintenant, le gestionnaire actuel a des références explicites aux 3 stockages et lorsque la requête "Promouvoir la vue avec wiew Id = X" arrive, il obtient simplement les métadonnées directement depuis le stockage de l'utilisateur et enregistre les métadonnées dans le stockage du produit. Donc, en conclusion, je pourrais dire que le modèle CoR n'est pas une solution géniale quand vous avez des exigences concernant les interactions explicites avec les éléments de la chaîne. Interface trop abstraite de CoR "HandleRequest()" vous donne seulement une occasion d'interagir avec un point d'entrée de la chaîne. Par ailleurs, il s'agissait d'une opportunité d'enregistrer une implémentation basée sur le CoR, mais la question portait en réalité sur les efforts et la maintenabilité.