public class StepClause
{
public NamedStepClause Action1() {}
public NamedStepClause Action2() {}
}
public class NamedStepClause : StepClause
{
public StepClause Step(string name) {}
}
基本的には、次のようなことができるようになりたいです。
var workflow = new Workflow().Configure()
.Action1()
.Step("abc").Action2()
.Action2()
.Step("def").Action1();
そのため、いくつかの「ステップ」には名前が付けられており、いくつかは付けられていません。
私が気に入らないのは、StepClause がその派生クラス NamedStepClause の知識を持っていることです。
私はこれをよりよくするためにいくつかのことを試しました。私は物事をインターフェイスに移動しようとしましたが、問題は具体的なものからインターフェイスに移動しました. Step() を完全に別の型の一部にすることもできます。その場合、この問題は発生せず、次のようになります。
var workflow = new Workflow().Configure()
.Step().Action1()
.Step("abc").Action2()
.Step().Action2()
.Step("def").Action1();
これは問題ありませんが、可能であればステップの命名をオプションにしたいと思います。
SO hereに関するこの他の投稿は、興味深く有望に見えます。あなたの意見は何ですか?元の解決策は完全に受け入れられないと思いますか?
ところで、これらのアクション メソッドは述語とファンクターを使用しますが、ステップに名前を付けるために追加のパラメーターを使用する必要はないと思います。
私にとって重要なのは、これらのアクション メソッドを 1 か所だけで定義することです。したがって、ジェネリックと拡張メソッドを使用した参照リンクのソリューションは、これまでのところ最良のアプローチのようです。