模型中属性的基于规则的可用值

时间:2012-03-07 14:03:34

标签: c# validation mvvm model viewmodel

我有一个问题,关于在模型类中放置特定属性的可用值的位置。假设您有一个具有两个属性Family和Series的模型类,其中Series属性的可能值取决于Family属性的值。

业务逻辑包含一组规则,用于定义由于Family属性指定的值而可用的Series值。模型本身应始终具有有效状态,这意味着如果Family属性的值发生更改且Series属性的可用值也发生更改,则必须将Series属性本身的值更改为其中一个可用值以适合有效的状态。

我的目的是在ComboBox中显示Family属性和Series属性的可用值。但目前我不确定是否要提供Series属性的可用值

  1. 进入ViewModel,
  2. 进入模型,
  3. 或在ViewModel和Model之间引入一个单独的层,它包含数据验证和为模型中的特定属性提供可用值的功能(充当普通数据容器)。
  4. 我倾向于使用第二种或第三种方法(我更喜欢第三种方法),因为模型中存在直接相关的值。这个例子其实非常简单。真正的问题包括近200个值,其中单个属性的可用值可能取决于最多5或10个其他属性。

    此外,从属值可能不在单个模型类中,并且相关模型类不相互了解。因此,获取模型类的属性的可用值所需的值可能位于两个或更多其他模型类中。

    您认为最好的方法是什么?还有另一种(更好的)解决方法,我上面没有提到过吗?

    谢谢,

    奥利弗

1 个答案:

答案 0 :(得分:1)

由于您已经声明Model类彼此不了解,因此您当然不应仅仅为了在这样一个深层上进行验证/聚合/过滤(或任何您可能称之为)的目的而创建依赖项。

您的要求通常适合ViewModel的问题,其中包括价值预备等。另一方面,如果模型始终必须处于有效状态,则您不希望依赖ViewModel进行验证。想象一下,您可能会在以后添加另一个使用Model数据但不能使用ViewModel的客户端。

因此,在我看来,额外的“层”或服务可能是最佳选择。