我正试图在基于消息传递的系统中管理多个模型。每个模型可能具有依赖于其他模型的值。例如:管理多个相互依赖的模型
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