MVC - 关注点分离

时间:2009-09-04 00:18:59

标签: asp.net-mvc design-patterns

我是新手。我想问一下关注点分离的MVC模型。我已经阅读了一些MVC教程,但我还没有完全理解每个模型,视图和控制器的角色。

例如,我说我正在为用户编写一个监控投资组合的应用程序。我希望着陆页显示基于不同标准的投资列表,例如,可以根据投资金额列出投资,另一个可以根据投资业绩对其进行排序。

我的问题是,根据设计模式,我应该在哪里编写用于生成列表的逻辑;在模型,视图或控制器中?

非常感谢任何展示关注点的asp.net MVC示例。

先谢谢你们。

3 个答案:

答案 0 :(得分:4)

冒着重复自己的风险,我会指出你给出的答案in this thread。 {/ 3}}可能值得花时间,Stack Overflow上的其他几十个也是值得的。

简单地分解:

控制器 - 控制应用程序流并做出有关数据的决策。

模型 - 执行业务逻辑。

观看次数 - 产生输出。

根据您的具体情况,您需要在查看图层中生成列表。使用模板创建列表结构,并使用从模型层获取的数据填充它们。

我不是asp.net程序员,所以我不能给你一个可靠的例子,但是要寻找其他SO线程。

答案 1 :(得分:3)

很好的问题,这是主观的,有很多解决方案,它归结为我认为的背景和个人的偏好。

使用ASP.Net实现MVC很多人都在谈论模型更像是一个ViewModel而不是模型,就像在其他一些框架中一样(有点像DTO)。考虑到这一点并将Controller视为应用程序流的协调者,在通过某种类型的服务访问的附加层中生成列表并不是错误的。您将为一组符合指定标准的ViewModel请求该服务,并让该额外层担心从该组标准生成这些列表的方式。这种方式所有控制器需要知道的是将一些标准传递给服务并为视图提供要显示的一组模型(视图模型),视图不做任何关于如何处理它所提供的数据的决定,模型既漂亮又轻巧。

希望这种解释是有道理的,如果人们不同意,我会批评批评......

答案 2 :(得分:1)

MVC模式“要求”您在模型中插入所有“业务逻辑”。模型用于访问数据库和获取数据,并以您必须使用Controller将其分配到View中的方式进行模拟。

图形示例:http://www.bhartisoftland.com/technologies-skill-sets/gifs/mvc-php.png

毋庸置疑,您可以绕过模型的使用并在控制器中编写所有逻辑,但这会导致非常广泛且可能冗余的代码量。使用控制器,您可以调用模型和视图,只需几行代码就可以将信息从一个交换到另一个。