我正試圖在基於消息傳遞的系統中管理多個模型。每個模型可能具有依賴於其他模型的值。例如:管理多個相互依賴的模型
public class V2Model : BaseModel
{
private int mSomeVal;
private byte mSomeByte;
// …
// Update mSomeByte based on multiple models values
public void SetMultipleDependecyValue(int someIntFromModel1, short someShawteeyFromModel3)
{
mSomeByte = Convert.ToByte((someShawteeyFromModel3/someIntFromModel1) + mSomeVal);
}
}
我也想用MVC模式,但不是通過模型實例,我想我會通過在一個「庫」的實例。 'Repository'實例將充當處理所有Model實例的管理器。其結果將是這個樣子:
public class V1Controller<ViewType, ModelType>
where ViewType : IV1View
where ModelType : BaseModel
{
ViewType mView;
BaseRepository mBaseRep;
public V1Controller(ViewType view, BaseRepository rep)
{
mView = view;
mBaseRep = rep;
mBaseRep.GetModel<ModelType>().PropertyChanged += new PropertyChangedEventHandler(V1ModelPropertyChanged);
}
void V1ModelPropertyChanged(object sender, PropertyChangedEventArgs e)
{
switch (e.PropertyName)
{
case "SomeVal":
// Update the view
int some_val = mBaseRep.GetModel<ModelType>().SomeVal;
mView.HexSomeValue = some_val;
// Oh BTW, we know V2Model's value depends on this... update it with V1Model and V3Model's values
short some_short = mBaseRep.GetModel<V3Model>().SomeShawteey;
mBaseRep.GetModel<V2Model>().SetMultipleDependecyValue(some_val, some_short);
break;
}
}
public void UpdateVal(int someValue)
{
mBaseRep.GetModel<ModelType>().SomeVal = someValue;
}
}
在這種情況下,如果V1Model的性質變了,V1ModelPropertyChanged,我就知道V2Model的對象上的依賴,並用適當的值更新。處理這種相互依存的模型方案有沒有更好的方法,或者這是一個可接受的解決方案?我沒有真正尋找任何第三方。
它是web還是WPF/SL? – Aliostad 2010-11-01 14:19:43
它是Winforms。 – SwDevMan81 2010-11-05 15:29:57
K.I.S.S.發生了什麼事作爲設計模式?你能否抽象地解釋你想要在沒有代碼的情況下實現什麼?也許有一個比你剛開始的解決方案更簡單的解決方案。 – 2010-11-06 19:11:34