Hello,
Pas de question spécialement sur le pattern en lui-même, simplement une question pour avoir votre avis sur le positionnement des classes dans l'architecture logicielle. (Et cela permettra également à ceux qui ne connaissent pas ce pattern de l'aborder)
Ce design pattern strategy sera utilisé par un WebService pour déterminer sa stratégie de "data mining" (c'est un bien grand mot, mais bon...).
Pour faire simple, disons que c'est la donnée qui détermine la stratégie (si c'est le produit X, alors le pré-traitement sera ça, le post traitement ça), avec un traitement commun à tous les produits.
Je précise que c'est une évolution d'un existant, où il n'y avait à l'époque qu'une seule stratégie (et donc pas de pattern en place), et que le WebService s'incorpore dans un ensemble plus grand, il utilise donc des couches métiers communes à d'autres applications.
Grossièrement, voici l'algorithme :
> Réception d'une requête XML
> Analyse de la requête
> Recherche du type de la donnée (accès à la base)
> Choix de la stratégie
> Pré-traitement, si nécessité par la stratégie (accès à la base ou non)
> Traitement commun (accès à la base)
> Post-traitement, si nécessité par la stratégie (accès à la base ou non)
> Incorporation des données dans un XML
> Envoi de la réponse XML
Pattern Strategy en lui-même, je pense faire une arborescence de ce type là :
- une classe DataMining qui définie le traitement commun
- une interface DataMiningStrategy
- deux classes ConcreteStrategyProductX et ConcreteStrategyProductY, qui définiront leurs pré et post traitement, et qui héritent de DataMining pour utiliser le même traitement commun
- une classe Context avec une référence vers DataMiningStrategy, et qui exécutera selon le produit, l'une ou l'autre des ConcreteStrategy
De plus, une contrainte projet impose l'utilisation d'une architecture logicielle propre à ma boite, qui organise la solution en briques techniques (proxy, modèles génériques d'exception, de logs, mapping à la base, etc...), briques "métier" (comme des Beans en Java) qui définissent chacune des aspects métiers (potentiellement sur les mêmes entités qu'une autre brique métier) et en briques applicatives, qui s'appuyent sur les briques techniques et métier.
Donc, ma question dans tout ça...
Etant donné que certaines des classes du Design Pattern Strategy utilisent des couches métiers, mais qu'elles définissent la stratégie propre au WebService, dans quelle brique logicielle doivent-elles être définies ?
- Dans le WebService
ou
- Dans une brique technique, sur lequel le WebService a une référence
ou
- Dans une brique métier, sur lequel le WebService a une référence
Habituellement, je pense que c'est fait au sein de l'application, donc ici du WebService, sauf que pour moi ça viole le découpage qui a été fait au niveau logiciel, dans le sens ou le Design Pattern contient une implémentation métier.
Je penche donc plutôt sur la troisième hypothèse, même si j'emets une réserve du fait qu'elle ne sera utilisée que par une seule brique applicative, et du fait que ça ne soit pas vraiment une brique métier, dans le sens où elle est modelée par le Design Pattern, et ne suit plus la découpe de la guideline originelle...
Si ça manque de détail n'hésitez pas ! 
Merci d'avance !
PS : Quand le code sera fait je posterai l'implémentation du Design Pattern Strategy pour ceux que ça intéresse. Je ne sais pas s'il existe pas déjà un tuto sur DVP en C# là dessus...
Partager