フィードバックの概要
では、この広告を閉じて (これ以上のフィードバックはないと思います)、私が理解したことを要約してみます。
- 戦略のパラメーターとして「コンテキスト」を使用すると、回避する必要がある密結合が発生し、おそらくクラスに隠されているはずのプロパティを公開することを余儀なくされる可能性があります。
- カップリングを最小限に抑えるには、必要な値を提供するか、少なくとも戦略への具象型の代わりにインターフェイスを使用することをお勧めします。
私は戦略パターンの明確な概要を把握しようとしており、コンテキストに依存する戦略を持つことが良い設計か悪い設計かを自問しています。
次の古典的な実装を見てみましょう
//The strategy
interface IStrategy
{
void Execute();
}
class ConcreteStrategyA : IStrategy
{
public void Execute()
{
Console.WriteLine( "Called ConcreteStrategyA.Execute()" );
}
}
class ConcreteStrategyB : IStrategy
{
public void Execute()
{
Console.WriteLine( "Called ConcreteStrategyB.Execute()" );
}
}
//The context
class Context
{
IStrategy strategy;
// Constructor
public Context(IStrategy strategy)
{
this.strategy = strategy;
}
public void UpdateContext(IStrategy strategy)
{
this.strategy = strategy;
}
public void Execute()
{
strategy.Execute();
}
}
私が見たすべての例には、基本的な引数 (整数など) を取る非常に単純な戦略があります。私が知りたいのは、戦略がコンテキストを使用して作業を行う場合に何か問題があるかどうかです。
それは次のようなものを与えるでしょう
//The strategy
interface IStrategy
{
void Execute(Context arg);
}
そして呼び出しは
//The context
class Context
{
....
public void Execute()
{
strategy.Execute(this);
}
}
この「結合」は避けるべきですか?大丈夫ですか?