C#とEmguCVを使用した画像処理プロジェクトに取り組んでいます。私たちのチームは3人で構成されています。より速く進歩させるために、私たち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
別のメソッドまたはそのクラスの読み取り専用プロパティを介して取得できる""など、クラスの他のメンバーがあります。
これが設計原理の観点からどれほど優れた解決策になるかはわかりません。これについてのご意見をお聞かせいただければ幸いです。ありがとう