2009-04-21 325 views
11

我刚刚完成了Scott Gu的Nerd Diner教程。我发现它非常有帮助,因为它不仅教会了ASP.Net MVC的基础知识,还教导了如何使用知识库,验证,单元测试,Ajax等。非常棒,但仍然可以管理。ASP.Net MVC查看结构

不过,我很好奇他的网站结构:

具体来说,他用这一观点strucuture为每个对象:
/ModelObject /编辑/
/ModelObject /新建/

然后提取两种观点之间的共同要素,并将其纳入局部。

我理解这个逻辑,但是如果你的数据库中有足够数量的表,它似乎会导致“视图爆炸”。

斯科特真的很好,所以我假设他的结构是正确的。但我想知道为什么。

谢谢!

[编辑澄清]

我知道,很多时候,有必要为了有多个动作(和视图)来处理在创建和编辑不同。这是非常简单的编辑和创建的情况,其中两个动作之间的唯一区别在于一种情况下模型具有ID并且需要更新,而在另一种情况下模型不会,所以它需要是插入。

在这种情况下,通过使用相同的视图来处理将导致重大问题的两种情况,是否违反了“哑视图”规则?

回答

6

视图结构基于控制器,而不是直接基于模型。在Mvc方法论中,您应该对控制器中的每个操作(实质上每个公共方法)都有一个视图。控制器操作不必直接与数据库中的每个表匹配,但数据库中表的数量与控制器和视图的数量之间可能存在某种直接关系。控制器是更高层次

这是标准的有在控制器上CRUD类型的行动,当它们适用:

  • 指数:列表中的项目
  • 详情:查看特定项目
  • 编辑:编辑项目
  • 创建新的项目
  • 删除:删除项目

这些操作中的每一个都需要一个视图(有时不止一个)。

所以,是的,如果它是一个大型应用程序,你可以收集大量的视图。最大限度地减少代码的方式是:

  • 提取共享功能,以局部视图,以保持行动的意见,小而简单地
  • 保持视图和控制器简单,使他们易于维护
  • 使用Ajax在一个视图中

指出的是,任何大的应用程序都将有很多的形式是非常重要的实现更多的功能。无论是Mvc还是Web Forms,如果需要处理大量数据,将会有很多必要的表单来执行此操作。

+1

你为什么列表删除?删除很少需要它自己的视图,它通常作为在索引,细节或编辑视图中启动的操作来处理。 – Aaron 2009-04-23 12:09:57

1

如果您具有asp.net webforms开发人员的背景,那么您的答案很自然。 有几个问题,这取决于观点。起初,使用asp.net-mvc我们没有完全配备的服务器控件为我们做了很多事情,而没有真正意识到他们做了什么。现在,你必须输入更多的代码,并有像html外科医生的眼睛。这样我可以找到一个合理的问题“视图爆炸” 其他项目遵循或多或少的结构,见项目由罗布康里: Mvc Storefront

PS:“瘦控制器,脂肪模型和......阿呆视图”

[更新回应澄清]

MHH ..我认为没有违反“哑观”。重要的是,所有视图都与业务逻辑层或模型中的代码无关。你可以有一个“保存”按钮,它是控制器必须知道哪个动作必须执行,插入或更新。

2

确实,这确实可以提供很多意见。然而,我发现在我的真实生活应用中,我会有很多表格,我没有与CRUD操作1:1的相关性。虽然我肯定有数据进入这些表格,但我发现大多数情况下,一个视图呈现来自至少两个(如果不是三个或更多)表格的数据。就像所有其他应用程序一样,您必须知道自己在做什么,以便您可以计划一些事情。任何大型应用程序都需要预先进行相当多的规划(其中包括分析MVC的视图/控制器数量)。

这只是你可以根据你的臀部和过去的经验一起推出的小应用程序。

1

在更多的思考,这是我在想什么:
结合编辑/创建视图,因为

    会很容易在简单的模型 - 属性相同显示
    - 相同的验证

但是这样做会迫使你要么

    - 同时处理更新,并在相同的动作
    插入 - 使用控制语句在视图中,以确定哪些浏览行为被用于更新

两个选项看起来丑陋的和不必要的,当它是如此易于使用单独的操作和单独的视图,通用代码被提取到一个部分。