【问题标题】:Should I move some Properties into a Model?我应该将一些属性移动到模型中吗?
【发布时间】:2013-08-02 22:00:35
【问题描述】:

我正在使用 MVVM 灯光,并且我有一个视图模型,但我不确定是否应该将一些属性移出,因为我现在有很多属性。

尽管它们大部分都是简单的属性,但我的视图模型有点长(437 行属性)

我想知道将一些属性移出到模型中是否有意义,从某种意义上说可以更容易地找到更重要的属性。

我的 wp7 视图上有 5 个控件。

IsEnabled 的 5 个属性(如果位置服务关闭,则所有属性都被禁用)l

6 个属性来存储用户选择的值

3 个中继命令。

1 个属性,用于根据所选内容隐藏/显示控件。

我仍在处理该页面,因此最终可能会有更多内容。

我想知道我是否应该取出存储用户信息的6个属性并将其制成模型。

然后,只需在 ViewModel 中添加 relayCommands、Visblity、Enabled 等内容,并拥有一个属性,当然还有我的 Model 类。

【问题讨论】:

    标签: windows-phone-7 mvvm mvvm-light


    【解决方案1】:

    拥有精益视图模型总是一件好事。它使其他开发人员(或您自己)以后更容易管理和理解。

    将特定领域的数据提取到模型中总是一件好事。假设您想稍后在不同的视图中引用该用户 - 将所有内容都堆积到您的视图模型中,每次创建新视图模型时都必须复制大量代码。不好。

    如果您将所述用户拉入它自己的域模型对象,那么您可以简单地使用一行代码引用该用户(并通过 setter 和 getter 轻松访问其属性。

    请记住,MVVM 代表模型、视图、视图模型,如果没有模型,您可能会陷入几乎混乱的代码和大量复制中。复制代码会导致复制时出现人为错误以及其他许多令人头疼的问题。


    现在这是一般的想法。我知道您在询问您应该如何管理您的“临时”属性(用户填写),我不得不说与上面相同的规则适用于此。拥有多个模型根本不是一件坏事(如果在企业环境中工作教会了我什么,它不害怕将代码拆分成可管理的大小)。

    您可以使用的另一种方法是为您的视图模型创建一个父类来继承。将任何“我的所有视图都需要这些”属性放在这里,具体信息留在继承超类的视图模型中。

    我注意到的第三件事是每个控件都有一个“isEnabled”属性。如果你有一个“全有或全无”的场景,就像你描绘的那样,你只需要一个。将该属性绑定到所有元素的可见性,并简化您的可见性管理六倍 =)

    希望这能解决一些问题! =)

    【讨论】:

    • 是的,要么全有,要么全无。只拥有一个属性是个好主意。出于某种原因,我认为他们都需要自己的,但因为它要么全有,要么全无。我不清楚您是否会将 isEnabled 例如放在模型中或将其保留在视图中?它只有一个 getter(检查位置服务是打开还是关闭)。与 Visablity 相同
    • 我会在视图模型中保留任何特定于控件的信息,因为它是特定于视图的。您可以将其视为“信息”的东西——您可能想要推送到服务器或保存在存储中的东西,这就是您放入模型中的东西。您可能想要发送到另一个视图的东西 - 这就是您放入模型的东西。祝你好运!
    • 好吧,如果我这样做,我会在模型中有一个属性,它可以获取服务器上的一些信息,并根据这些信息隐藏或显示控件。如果我有在 VIEWMODEL 中显示/隐藏控件的代码,那它是如何工作的?例如,我是否需要做一个信使或其他事情来告诉它需要隐藏?
    • 我也在想你能不能给我看一个在一个视图中有 2 个 ViewModel 的例子。我现在只做1对1。
    【解决方案2】:

    视图的任何内容都应该在您的视图模型中。理想情况下,您不希望仅仅因为您的视图也需要更新您的模型。任何这样的事情都会进入 ViewModel。 如上所述,您可以分解视图模型。视图到视图模型不需要一对一的映射。一个视图可以由许多视图模型组成。

    437 行属性你的意思是说你有 437 个属性吗?如果这种情况对你的观点本身来说太过分了,我会重新考虑将你的观点分解成更简单的观点以提高可用性。

    Here 是我们在使用 MVVM 时通常会遇到的几个常见场景

    【讨论】:

      猜你喜欢
      • 2015-04-15
      • 1970-01-01
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      • 2012-11-07
      • 2011-02-03
      相关资源
      最近更新 更多