次のインターフェイスを定義しました。
public interface IStateSpace<State, Action>
where State : IState
where Action : IAction<State, Action> // <-- this is the line that bothers me
{
void SetValueAt(State state, Action action);
Action GetValueAt(State state);
}
基本的に、IStateSpace
インターフェースはチェス盤のようなものであるべきで、チェス盤の各位置には一連の可能な動きがあります。ここでのそれらの動きはIAction
s と呼ばれます。このインターフェイスをこのように定義したので、さまざまな実装に対応できます。その後、2D マトリックス、3D マトリックス、グラフなどを実装する具象クラスを定義できます。
public interface IAction<State, Action> {
IStateSpace<State, Action> StateSpace { get; }
}
はIAction
、上に移動する (これは、 に(2, 2)
移動する場合(2, 1)
)、下に移動するなどです。ここで、各アクションが StateSpace にアクセスできるようにして、いくつかのチェック ロジックを実行できるようにします。この実装は正しいですか?それとも、これは循環依存の悪いケースですか? はいの場合、別の方法で「同じ」を達成する方法は?
ありがとう