【问题标题】:Asp.net MVC - ViewModel designAsp.net MVC - ViewModel 设计
【发布时间】:2011-05-24 11:46:08
【问题描述】:

我的控制器上有一个创建和一个编辑操作。

我为每个动作都有一个视图模型。两个视图模型都有大约 15 个属性。两种型号共有 10 个,其余的则不同。

我的问题:我应该创建一些具有公共属性的基本模型(保持 DRY)还是不应该在这里关心?

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    这几乎肯定会归结为您所处的实际情况。要问自己的最重要的问题是:这些共享属性是否形成某种基本实体?如果答案是肯定的,那么拥有基类可能是安全的。如果没有,我会远离它,只是将属性放在各个模型上。

    如果您在创建视图模型中遗漏了一些在编辑视图中可编辑的属性,则共享属性可能不构成某种类型的基类,您应该避免使用基本视图模型方法。如果额外的属性只是辅助属性,比如选择列表,那么您可以安全地拥有一个具有通用属性的基本模型。

    【讨论】:

      【解决方案2】:

      您绝对应该关心。写出好的、干净的代码对灵魂有好处,而且我们都知道,每次你写出糟糕的代码,上帝都会杀死一只小猫。 :( 我们不希望这样。

      将公共代码/属性移动到一个基类,然后有两个后代,它很好,干净并且使维护更容易。

      【讨论】:

        【解决方案3】:

        我个人会选择基类选项,这样您就必须在多个地方重复数据注释属性。

        【讨论】:

        • 您可以通过在单独的类中声明它们并在每个视图模型上使用MetadataType 属性来重用数据注释。
        【解决方案4】:

        我的观点是,如果我正在创建或编辑某些东西,它们本质上是一样的。核心数据结构确实应该没有任何区别。

        但假设存在差异,我会像在其他任何地方一样使用基类来共享公共属性。

        【讨论】:

        • 如果您正在创建或编辑某些东西,它可能本质上不是一回事。例如,您可以通过从外部服务导入值来创建某些东西,在这种情况下,您的创建模型有足够的属性供您访问该服务并找到您想要导入的对象。导入后,您的编辑模型几乎肯定与您的创建模型无关。
        • 嗯不确定我完全同意尼克,如果我有一个汽车模型,无论我创建还是编辑它,它的属性都是相同的,它有许多门、轮子数量、座位容量等。我如何获取数据以创建 Car 实例的机制与模型的实际实现无关。
        • @SimonLee:这个问题专门询问视图模型,而不是实体模型本身。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-31
        • 2010-12-11
        相关资源
        最近更新 更多