Execute()メソッドを同時に呼び出すことができる一連のコマンドがある場合、コマンドクラスを単体テストして他のメンテナがコードを追加しないようにする方法がありますメンバーデータ(コンストラクタに渡された読み取り専用メンバー以外)?機能コマンドシステムのアーキテクチャを改善するのに役立つ必要がある
例: コードが開始されると、アクションにサービスを提供できるスクリプトアクションとコマンドの間のマッピングを作成します。
actionCommandTable =
[“Translate”, new TranslateCommand(appcontext)],
[“Scale”, new ScaleCommand(appcontext)],
[“Assignment” new AssignmentCommand(appcontext, expressionEvaluator)]
その後、実行時に:
actionCommandTable[“Translate”].Execute(actionDataContext);
変換コマンド:
public class TranslateAction : ActionCommand {
//read-only interface
private readonly AliasProvider aliasMap;
//bad - need to prevent this instance from being added - will be overwritten unexpectedly
private int transientValue;
public TranslateAction(IAppContext appContext) {
aliasMap = appContext.AliasMap;
}
public override async Task Execute(ActionDataContext actionDataContext) {
//assign to transientValue
//do some work
//await an animation
//do more work
//read from transientValue
}
}
この例では、Executeのすべての作業はoですkが共有メンバー上で動作しない場合はkです。
actionDataContextは、一時的なステートフルデータのターゲットとすることを意図しています。
これは、あなたが単体テストよりもRoslynアナライザのほうがよいと思われます。 – svick