Nous travaillons sur un projet de traitement d'image utilisant C# et EmguCV. Notre équipe est composée de 3 personnes. Pour progresser plus rapidement, nous travaillons tous les trois sur différents sous-problèmes ou expérimentons différents algorithmes en même temps.Modèle de stratégie - types/valeurs de retour multiples
Actuellement, chacun d'entre nous crée une fonction qui contient le code majeur sur lequel nous travaillons et chacun d'entre nous apporte des modifications au pilote pour ajouter des appels à nos nouvelles fonctions. Tout cela se passe sur le même fichier. Nous utilisons le contrôle de source, donc nous ne sommes pas encore entrés dans les autres orteils. Mais je ne pense pas que cela sera durable car nous faisons plus de progrès. En outre, je pense que le code devient de plus en plus désordonné. Je pensais qu'il serait peut-être mieux pour nous d'implémenter le pattern Strategy et d'encapsuler nos algorithmes ou sous-problèmes dans des classes qui leur sont propres et d'appeler la méthode execute sur chacun d'eux depuis le driver.
Cependant je me rends compte qu'il peut y avoir quelques problèmes avec cette approche:
- différents algorithmes prennent différentes entrées (image source, certains ensembles de paramètres différents, etc.)
- algorithmes retour sorties différentes (nouvelle image, jeu de fonctionnalités, une matrice, etc.)
Le premier problème, je crois que je peux surmonter en faisant quelque chose comme ça
Class Strategy1 : IStrategy
{
int _code;
// Different *input* paramteres for the strategy may be passed in the
// constructor depending on the type of strategy
public Strategy1(int c)
{
_code = c;
}
// This is the method defined in the IStrategy interface
public void execute()
{
// Some code that uses _code and does some processing goes here
}
}
Je peux changer les constructeurs pour les différentes stratégies afin qu'ils puissent prendre différents types d'arguments. Quand je pense à la façon de gérer le problème du retour de plusieurs types/valeurs, la première chose à laquelle je peux penser est de changer le type de retour d'exécution de void à quelque chose comme une table de hachage, où les différents paramètres de retour peuvent être stocké et retourné OU avoir d'autres membres de la classe, comme "int _returnCode
" qui peut être récupéré par une autre méthode ou par le biais de propriétés en lecture seule de cette classe.
Je ne suis pas sûr de savoir quelle serait la solution en termes de principes de conception, et je serais heureux de connaître votre opinion là-dessus. Merci
Si les stratégies sont si différentes les unes des autres - devraient-elles implémenter la même interface? – dtb
Je suis d'accord avec DBT. Voir http://en.wikipedia.org/wiki/Interface_segregation_principle – TrueWill
Quand vous dites que les algorithmes renvoient des choses différentes, est-ce que chaque algorithme renvoie une et une seule chose de types différents, ou plusieurs choses, certaines communes? Si vous n'avez aucun point commun entre ce que les implémentations retournent, il ne semble pas que le pattern Strategy soit correct. – Mathias