【问题标题】:Should I split my Views up into a lot of small Views or just make it one big View?我应该把我的视图分成很多小视图还是只把它变成一个大视图?
【发布时间】:2014-05-30 12:59:41
【问题描述】:

我目前正在开发一个 MVC 3 Web 应用程序项目,我需要在首页上显示大量信息。我在网页布局和设计方面相对较新,所以我在如何构建此页面背后的代码方面遇到了困难。

我的第一个想法是将页面(视图)拆分为尽可能多的页面(小视图),以便视图模型更小且更易于管理。虽然我不确定这是否是正确的方法。或者我应该尝试将页面的所有需求融入到一个视图中,以显示我需要的所有信息?

【问题讨论】:

  • 您的问题涉及面向对象编程的许多方面。简而言之,这取决于您的情况,但通常我们将大对象/视图拆分为小对象/视图的目的是使代码可重用、易于维护、易于理解、易于测试..
  • 为什么要写两次代码?如果某些东西可以重复使用,那么什么时候不能重复使用呢?
  • 我同意@Larry 的一切,可以添加以下内容。在当前系统上,我正在处理某些屏幕,将所有内容构建到一个视图中非常复杂。我选择将它们分成更小的部分,这样它们更易于维护,当视图很小并且适合一个屏幕时,总是更容易理解视图在做什么,如果你经常需要向上浏览,就很难理解某些东西下来。
  • @3dd 我打算这样做。你是用局部视图还是什么?您是如何在 MVC Razor 中将多个视图构建到一个视图中的?
  • 是的,我使用了部分视图,然后通过在主视图中调用 @Html.Partial("ViewName", Model) 来渲染它们

标签: c# asp.net-mvc


【解决方案1】:

将大视图对象拆分为小视图会有很多好处,主要是可重用性、可测试性以及两个月后您将不必(不可避免地)这样做。

使用较小的视图将首先使您能够在项目的其他部分重用这些视图(应该有一个“如果需要”,但您这样做的机会相当高)。使用单一视图没有这样的灵活性。

较小的视图也更易于概念化(简洁、正确命名的视图将节省您阅读其一百行代码的时间)、维护(您可以隔离错误,并在不影响每个视图的情况下更改功能)其他)和测试(在时间、复杂性和依赖注入方面)。

使用单一的、巨大的视图(嗯,可能需要几分钟的开发时间)不会获得任何好处,但是在长期(和短期)期间你错过的东西是可观的。

要在 MVC3 中使用几个较小的视图,您可以在主视图中使用部分视图,

<div>
  @Html.Partial("_PartialView", new PartialViewModel)
</div>

【讨论】:

  • 如何使用 Mvc3 Razor 执行该操作?它是通过局部视图执行的吗?如何将多个视图构建到一个视图中?
  • 是的,你可以使用局部视图;每个视图都可以是局部视图,这取决于您如何将其合并到主视图中。
  • 谢谢,但是使用局部视图意味着调用它们在控制器中定义的方法(_PartialView())。所以回到服务器端而不是留在客户端。有没有办法留在客户端调用CHILDREN视图:小视图直接内置到主视图中,不调用控制器方法?
  • 我认为你错了:使用@Html.Partial 不会调用控制器上的操作,它只是根据视图名称、模型和视图数据生成一个字符串。如果您查看the implementation,它不会路由到控制器。
  • 现在我明白了,谢谢@rae1 stackoverflow.com/questions/16886585/…
【解决方案2】:

是的,将大视图拆分为部分视图可能是积极的,即使您确定部分视图不会被重用。如果您的大视图在概念上被划分为多个部分,那么相应地拆分视图是有意义的。在包含大量嵌套 div 标签的大型视图文件中,这些部分可能不明显。当然,找到合适的平衡点。每个 div 标签的部分视图将是矫枉过正。 :)

@{
    Layout = "~/Views/Shared/_Layout.cshtml"
}

<div id="page">
    @Html.Partial("Top")
    @Html.Partial("Middle")    
    @Html.Partial("Bottom")        
</div>

【讨论】:

    【解决方案3】:

    这得到了“它取决于”的好旧答案:)

    如果首页的不同部分可以在其他地方使用,那么将其分成几个逻辑部分视图是有意义的。但是,如果不是,就没有理由将其全部分解。您应该简单地构建一个设计精美的视图模型。

    不知道更多细节,也许像这个非常粗略的例子:

    public class FrontPageViewModel
    {
        public Section1Model section1 { get; set; }
        public Section2Model section2 { get; set; }
        public Section3Model section3 { get; set; }
        public Section4Model section4 { get; set; }
    }
    

    ...您的剖面模型是使用逻辑属性构建的

    public class Section1Model
    {
        public string Property1 { get; set; }
        public string Property2 { get; set; }
        public string Property3 { get; set; }
    }
    
    public class Section2Model
    {
        public string Property1 { get; set; }
        public string Property2 { get; set; }
        public string Property3 { get; set; }
        public string Property4 { get; set; }
        public string Property5 { get; set; }
    }
    // etc.
    

    那么在你看来你可以这样做:

    <div id="section1Content">
        @Html.DisplayFor(m => m.section1)
    </div>
    <div id="section2Content">
        @Html.DisplayFor(m => m.section2)
    </div>
    <!-- etc. -->
    

    【讨论】:

    • 视图的不同部分将不再使用,但是当前视图是如此复杂。所以我想为页面的每个部分定义许多视图,并在最后将它们全部构建到一个视图中
    • 对,因此您可以从描述主视图的每个“部分”的复杂类构建视图模型,而不是使用“视图”,然后在主视图中使用显示模板(每个类一个代表一个“部分”),并像我在回答中所展示的那样将所有内容完全分开。那有意义吗?部分视图用于创建可重用视图(您不想要),DisplayTemplates 用于保持代码整洁有序(除其他外)
    猜你喜欢
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    相关资源
    最近更新 更多