我们正在使用 C# 和 EmguCV 进行图像处理项目。我们的团队由3人组成。为了取得更快的进展,我们三个人同时处理不同的子问题或尝试不同的算法。
目前,我们每个人都创建了一个包含我们正在处理的主要代码的函数,并且我们所有人都对驱动程序进行了更改以添加对我们新函数的调用。所有这些都发生在同一个文件上。我们正在使用源代码控制,所以我们还没有进入对方的脚趾。但我不认为随着我们取得更多进展,这将是可持续的。另外,我觉得代码越来越混乱。
我在想我们最好实现策略模式并将我们的算法或子问题处理封装到它们自己的类中,并从驱动程序中调用每个类的执行方法。
但是我意识到这种方法可能存在一些问题:
- 不同的算法采用不同的输入(源图像、一些不同的参数集等)
- 不同的算法返回不同的输出(新图像、特征集、矩阵等)
我相信我可以通过做这样的事情来克服第一个问题
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
”,可以通过其他方法或通过该类的只读属性检索。
我不确定这在设计原则方面会有多好,并且很高兴听到您对此的看法。谢谢