我已經定義如下界面:泛型環形依賴性
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
。我已經定義這個接口這種方式,所以我可以適應不同的實施方式:然後我可以定義實現2D矩陣,三維矩陣,圖表等
public interface IAction<State, Action> {
IStateSpace<State, Action> StateSpace { get; }
}
IAction
一個具體的類,將向上移動(此是,如果在(2, 2)
移動到(2, 1)
),向下移動等 現在,我會希望每個動作都可以訪問一個狀態空間,因此它可以做一些檢查邏輯。這個實現是否正確?或者這是一個循環依賴的壞例子?如果是,如何以不同的方式完成「相同」?
謝謝
你剛剛讓我的大腦爆炸了一點。 – Aren 2010-05-20 21:35:49
你可以添加IAction的定義嗎? –
brickner
2010-05-20 21:45:55
hm,它在那裏,第二塊代碼。 – 2010-05-20 21:56:32