【问题标题】:Rule-based available values for a property within model模型内属性的基于规则的可用值
【发布时间】:2023-04-11 11:48:01
【问题描述】:

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

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

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

  1. 进入 ViewModel,
  2. 进入模型,
  3. 或者在 ViewModel 和 Model 之间引入一个单独的层,该层涵盖数据验证和为模型中的特定属性提供可用值的功能(充当普通数据容器)。

由于模型中的直接相关值,我倾向于使用第二种或第三种方法(我更喜欢第三种方法)。这个例子其实很简单。真正的问题涉及大约 200 个值,其中单个属性的可用值可能取决于多达 5 或 10 个其他属性。

此外,依赖值可能不在单个模型类中,并且相关的模型类彼此不知道。因此,获取模型类属性的可用值所需的值可能位于两个或多个其他模型类中。

您认为最好的方法是什么?还有其他(更好的)方法可以解决我上面没有提到的问题吗?

谢谢,

奥利弗

【问题讨论】:

  • 只是一个评论,而不是一个答案:我认为这取决于你在谈论什么样的价值观。在我看来,如果他们关注业务验证规则,他们应该留在模型中,但如果它们是特定 UI 所需的“只是”文本,那么它们应该留在 ViewModel 中。我不同意第三种解决方案,另一层?验证或任何其他必须留在(一个)模型中。
  • 谢谢。不,这些值不是“只是”文本 - 它们是“真实”值 :) 使用单独层的方法来自此处的另一个用户,他回答了类似的问题,但与大量相关值无关。

标签: c# validation mvvm model viewmodel


【解决方案1】:

既然您已经声明模型类彼此不认识,那么您当然不应该仅仅为了验证/聚合/过滤(或任何您可能称之为的)的目的在如此深的层上创建依赖关系。

您的要求通常符合 ViewModel 的关注点,其中包括价值准备等。另一方面,您不想依赖 ViewModel 进行验证,因为您的模型始终必须处于有效状态。想象一下,稍后您可能会添加另一个使用您的模型数据但不能使用 ViewModel 的客户端。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 2014-01-07
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    相关资源
    最近更新 更多