English 中文(简体)
MVVM ViewModel是否进行类型转换/验证?
原标题:Should the MVVM ViewModel perform type conversion/validation?
  • 时间:2009-08-26 11:41:46
  •  标签:

我们只是重新加入世界森林论坛中的多国机器。

我们已经以高度分类的特性(粗略、双倍)落实了我们的看法。 等等,我们认为我们必须遵守。

类型转换工程(K)大部分,因此输入数据就足够简单。 但是,我们遇到了验证问题。

如果说,将非数字价值输入一个受数字财产约束的盒式中,转换失败,财产永远不会被设定,我们从没有机会向用户提供适当的反馈。 更糟糕的是,这些财产保留了目前的价值,导致在观点中所显示的东西和实际上的观念之间出现不匹配。

我知道,所有这些都可以用价值转换器处理。 但我已看到若干意见,大意是,转变不应是根本的责任。 意见中的内容是说明、转换、验证等。 观点应该成为我们的责任(因此,论点是这样)。

如果是这样,我们就应当把大部分财产改写到我们的视野中,以便加以扼杀,并通过国际电子信息信息网络接口提供错误信息,例如。 它肯定会更简单、更精干的XAML。 另一方面,从观点设计者的观点来看,转换、验证等将不那么清晰、明确和灵活。

在我们看来,这两种办法似乎基本不同,因此,在我们作出决定之前,我们同一些知情的、关于此事的SO观点一样。

因此,Gis Models是否应当使一种简化的、基于文字的界面暴露在内部的观点和处理转换? 或者,观形特性是否应当暴露出实际数据类型,使这种研究能够处理?

<>Update:

很难在这里找一个胜者,但我最后就把你中的一人赶走了,他多少像我一样。

具体地说,我们决定对“观点”特性进行分类。 其主要原因是它给我们设计观点提供了灵活性,以及在XAML中明确宣布转换/配制的权力。

我注意到,与大家的假设是,如果你不同意,意见的设计是固定的,是准备好的。 因此,没有关于转换、格式化等的决定。 有必要这样做。 但是,我们的工作是个不错的过程,我们只字不提以前提出的所有重要细节。

事实上,在我看来,除了精心设计的设计之外,将《国际倡议》的细节放在创造力的空间上,而且在整个执行过程中,总是会最终形成形态。

所有这一切的意思是,虽然商业规则的执行当然属于《观点》的范畴,但我们认为,简单转换和格式似乎是一种看法。 它可能像这里这样健全,但我实际上并没有想到,在观念上,需要单位检测(我们单位对实际的类型转换器进行了长时间测试)。

所有这一切都经过了深刻的讨论,民俗,充满了完善的见解。 感谢。

最佳回答

这是一个非常令人感兴趣的问题,我不认为这个问题有明确答案,但我竭尽全力向大家表达我的想法。

看一下我所理解的多指标类集调查模式,观点要点是,以能够理解的方式披露数据而没有<>。 例如,让我们推测,我们正在模拟汽车的速度:

public class CarModel
{
    public int MilesPerHour { get; set; }
}

public class CarViewModel
{
    private CarModel _model;

    public int MilesPerHour
    {
        get { return _model.MilesPerHour; }
        set { _model.MilesPerHour = value; }
    }
}

在上述例子中,我把财产暴露为隐蔽物,因为这属于模式。 你在问题中列出了这些缺点,但其主要好处是,它使意见的作者能够了解如何显示这一数据的宝贵信息。 认为我们(作为观点的作者)不知道观点是什么样子。 通过承诺将数据视为一种观点,可以使用一种案文箱或一些只接受数字(如二字)的其他控制来显示信息。 如果我们说,我们将以我们assume的方式来编制数据,这对把这一重要权力从中删除的观点是有助益的。

另一方面,我们在现实世界中工作。 我们往往知道什么观点。 我们很少pl,在同一个观点Model上持不同看法,并将转换成《观点》简单易行。 我不认为这是正确的,但这并不意味着你获得我使用的生产法......

最后(我相信你知道这一点,但为了完成......),商业逻辑should将在《观点》中完成。 如果我们决定该车的长度超过70mph,那么,要强制执行这一点,就没有责任。 因此,你仍然以某种错误提供人告终,但是在业务而不是显示水平。


Okay, maybe that wasn t final....

我想谈谈肯特的评论,我的想法符合评论。

显然,我和肯特的观点(我的理解是)之间的主要区别是,他认为观点是观点的一种模式,我认为这是使《示范法》暴露于观点的东西。 我承认一个微妙的区别,但我认为,总体情况是,我不想去掉该模式提供的信息,即使它使使用Im这一具体观点更容易。

我认为,基于以下假设,即你们应当能够放弃看法,他们应当根据屏幕大小、硬件、平台、相对性和环境的要求,把可能发生变化的东西排在一边。 有趣的先导是,我有never,实际上需要这一功能,也看不到曾经使用过的任何东西(除了概念应用的证明之外),但如果我们同意现在或今后任何时候使用过这种功能,而且每个观点都与一种,只有一种,那么,我们就会回头来把所有法典放在密码背后的档案中,彻底 throw弃《观点》——毕竟,我们如此紧密地把它同起来。

理想的情况是,我可以说,“这一价值是一纸空文,永远是一纸空文,你可以像你一样在任何方面显示这种价值。 但是,你可以给我留下任何东西,我尽了最大可能使其适合,如果我能够让你们知道的话。” 基本上,我的MilesPerHour财产应当有一个固定的炉子,而是一个物体。 这样,这些观点能够保存我认为他们需要的所有信息,但不必担心转换或验证。

问题回答

完全属于该观点模式,原因包括:

  • Designers own the XAML. Do you want the designers to have to understand and implement the requisite type conversion and validation logic?
  • Testability. Don t you want to validate that your conversion and validation logic is working correctly? It s much harder if it s embedded in the view.

另一方面,从观点设计者的观点来看,转换、验证等将不那么明确、灵活。

我认为这是一个空洞的问题,因为观点设计者应当对这些事情负责。 设计师试图使企业部看上去,并感到某种方式;执行业务逻辑,包括转换和验证逻辑的是开发商。

Should the MVVM ViewModel perform type conversion/validation?

<>Yes。

观点模式是观点和模型之间的抽象层面,是进行任何类型转换(而不是繁琐的转换器)的完美地点。 绝对应当作为观点模式的一部分加以验证。

我们利用我们的《观点模型》尽可能处理数据类型的转换。 这就减少了对价值转换者的需求,使之适应一些非常具体的情况。 你们想要暴露出哪一种情况最容易消费。 这一工作进展良好。

你提出的一个具体问题:

If, say, a non-numeric value is entered in a text box bound to a numeric property, the conversion fails, the property is never set, and we never get a chance to provide proper feedback to the user. Worse, the property retains its current value, leading to a mismatch between what s displayed in the view and what s actually in the ViewModel.

您的意见模式可作为nullable类型处理。 这仍应使基本来源得到更新,即使输入了无效数据,并启动验证。 这在我们与日期和日期选择时间相似的情况下进行。

视而不见。 我们没有官方设计师,我们的开发商就是我们的设计者,这样,眼umb有某些好处:

  • We (developers) get to keep our sanity (XAML is somewhat less verbose)
  • Business logic (including validation) stays in the view model and can enable testing

Good Luck!

-

这是一个好的问题,我当然可以看到双方的讨论。

我认为,你真心想的是,你可以使用的是适当的<条码>。 这将提供一个更好的用户经验,因为你的用户在一定程度上能够意外地进入一些领域的案文,而且由于控制限制投入而不证明是有效的,你可以维持更强烈的“观点”。

我不敢肯定你打算如何实施这种控制,我知道,传统的pin子/NumericUpown控制正在偏离正轨,因为这些控制是便于触动的,但我并不认为,实行这种控制将违反设计方法的纯性或你的看法。 随同往,通过提供反馈。 这种技术使你能够在不出现任何实际缺陷的情况下获得两个世界的最佳选择(除了建立数字控制之外)。

或者,观形特性是否应当暴露出实际数据类型,使这种研究能够处理?

  1. <>Restrong>Convert and templates are made in View, 因为两者都仅仅是将smodelsmoviewdels into Controls! <编码>Controls , 仅可在查询。

  2. Validation > 载于,ViewModel,因为验证是根据业务规则进行的,甚至可以通过向远程服务电话进行。 观点并不了解商业规则,但知道如何提出验证结果。

如果说,在受数字财产约束的盒式中添加非数字价值

精心设计的计数盒式盒式控制永远不允许用户输入非数字值。





相关问题