【发布时间】:2011-05-03 10:45:57
【问题描述】:
我正在尝试在基于消息传递的系统中管理多个模型。每个模型可能具有依赖于其他模型的值。例如:
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 模式,但不是传递模型实例,而是传递一个“存储库”实例。 “存储库”实例将充当处理所有模型实例的管理器。结果看起来像这样:
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 对象的依赖关系,并使用适当的值对其进行更新。有没有更好的方法来处理这种相互依赖的模型方案,或者这是一个可以接受的解决方案?我并不是真的在寻找任何第 3 方。
【问题讨论】:
-
K.I.S.S. 发生了什么作为设计模式?你能抽象地解释你在没有代码的情况下想要实现的目标吗?也许有一个比您开始使用的解决方案更简单的解决方案。
-
@SyntaxC4 - 我不认为这个例子那么复杂。我的前两句话解释了我想要做什么......
-
@SyntaxC4 微软几年前就杀了它。
标签: c# winforms model-view-controller models