J'essaie de gérer plusieurs modèles dans un système basé sur la messagerie. Chaque modèle peut avoir des valeurs dépendantes d'autres modèles. Par exemple:Gestion de plusieurs modèles interdépendants
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);
}
}
Je voudrais également utiliser le modèle MVC, mais au lieu de passer une instance de modèle, je pensais que je passerais dans une instance « dépôt ». L'instance 'Repository' agirait comme un gestionnaire pour gérer toutes les instances du modèle. Le résultat ressemblerait à quelque chose comme ceci:
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;
}
}
Dans cette situation, si la propriété de V1Model a changé, en V1ModelPropertyChanged, je sais la dépendance sur l'objet de V2Model, et le mettre à jour avec les valeurs appropriées. Y a-t-il une meilleure façon de gérer ce modèle de modèle interdépendant, ou serait-ce une solution acceptable? Je ne cherche pas vraiment de tiers.
S'agit-il de Web ou de WPF/SL? – Aliostad
C'est Winforms. – SwDevMan81
Qu'est-il arrivé à K.I.S.S. comme un motif de conception? Pouvez-vous expliquer de façon abstraite ce que vous essayez d'atteindre sans code. Peut-être qu'il existe une solution plus simple que celle avec laquelle vous avez commencé. –