私はかなり前からコマンドパターンを使用していますが、実際にExecute
メソッドにどれだけのロジックを入れることができるか本当にわかりません。
コマンドパターンの現在の実装は次のようになります。
public abstract class Command
{
public static event EventHandler Completed = delegate { };
public bool Success { get; private set; }
public Exception Exception {get; private set; }
public abstract bool Execute();
protected bool OnCompleted(bool success, Exception ex = null)
{
Success = success;
Exception = ex;
Completed(this, EventArgs.Empty)
return success;
}
}
そしてこれらは私が自分自身に尋ねる(そして私のコマンドで練習する)質問です:
- メッセージボックスやファイルを開くダイアログなどを表示してもよいですか?
- オブジェクトのプロパティを設定することはできますか?
- コマンドにビジネスロジックを含めることはできますか?
- コマンドはとにかくGUIコントロールを変更できますか?
- どのレイヤーコマンドが属していますか?ビューまたはデータレイヤー?両方のレイヤーでコマンドを使用できますか?
- コマンドは、以前にあったすべてのことを実行できます
button1_Click
か? - 単体テスト可能なコマンドである必要がありますか?
- コマンドは、APIを使用し、アプリケーションの最後の層を構築し、例外をキャッチする最後の手段でもあるユーザーと見なすことができますか?
- コマンドはコードでも実行できますか(コマンドはapiを呼び出し、apiは実行され、最後に他のいくつかのapiがコマンドを呼び出します)、ユーザーのみがそれを呼び出すことができ、APIはそれらの存在を知らないはずです。
- MVC、MVVC、またはコントローラーを使用したその他のデザインパターンでコマンドを実行する場所はありますか?それらは相互に排他的であるようです。何が望ましいですか?
コマンドパターンを実装する方法を示すチュートリアルはたくさんありますが、実際のウォルドアプリケーションに適用する方法については実際には説明されていません。