Мы работаем над проектом обработки изображений с использованием C # и EmguCV. Наша команда состоит из 3 человек. Чтобы ускорить прогресс, мы втроем работаем над разными подзадачами или экспериментируем с разными алгоритмами одновременно.
В настоящее время каждый из нас создает функцию, которая содержит основной код, над которым мы работаем, и все мы вносим изменения в драйвер, чтобы добавлять вызовы к нашим новым функциям. Все это происходит в одном файле. Мы используем управление исходным кодом, поэтому мы еще не вступили друг в друга. Но я не думаю, что это будет устойчивым, поскольку мы добьемся большего прогресса. Кроме того, я чувствую, что код становится все более грязным.
Я подумал, что для нас может быть лучше реализовать шаблон Стратегии и инкапсулировать наши алгоритмы или обработку подзадач в свои собственные классы и вызывать метод execute для каждого из драйвера.
Однако я понимаю, что при таком подходе могут возникнуть некоторые проблемы:
- Различные алгоритмы принимают разные входные данные (исходное изображение, некоторый другой набор параметров и т. Д.)
- Различные алгоритмы возвращают разные выходные данные (новое изображение, набор функций, матрица и т. Д.)
Первая проблема, которую я считаю, я могу преодолеть, сделав что-то вроде этого
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
}
}
Я могу изменить конструкторы для разных стратегий, чтобы они могли принимать аргументы разных типов.
Когда я думаю о том, как решить проблему возврата нескольких типов / значений, первое, о чем я могу подумать, - это изменить тип возвращаемого значения execute с void на что-то вроде хеш-таблицы, где могут храниться различные возвращаемые параметры. и возвращенные ИЛИ имеют других членов класса, например "int _returnCode
", которые могут быть получены другим методом или через свойства этого класса, доступные только для чтения.
Я не уверен, насколько хорошим было бы это решение с точки зрения принципов проектирования, и был бы рад услышать ваше мнение по этому поводу. Спасибо