MVC 模式是不是实现了 Web 框架的常见任务?

Posted

技术标签:

【中文标题】MVC 模式是不是实现了 Web 框架的常见任务?【英文标题】:Does MVC pattern implement common tasks of web framework?MVC 模式是否实现了 Web 框架的常见任务? 【发布时间】:2020-10-31 19:20:31 【问题描述】:

Web 应用程序框架的常见任务(例如:Django 或 Laravel 或 .NET 或 beego):

request / response abstraction 
session state 
user authentication & authorisation 
page templating 
URL mapping 
DB access 
security 
caching

MVC设计模式实现以上常见任务,如下图:

    URL 映射 由MVC 的Controller 组件处理。控制器将请求路由到处理程序。例如:http.ServeMux 是 GOLang 的控制器 package

    请求/响应抽象Controller通过注册handlers来执行,由web开发者编写,如下图:

    sm := http.NewServeMux()     // in GoLang
    
    sm.Handle("/", productHandler)
    

    会话状态由网络开发者编写的handler代码处理

    页面模板由MVC的模板引擎(视图组件)处理

    用户认证和授权由网页开发者编写的handler代码处理

    DB 访问由 MVC 的 model 组件处理。

    securitycaching 由 Web 开发人员编写的 handler 代码处理


这是对MVC设计模式的正确理解来实现Web应用程序框架的常见任务吗?

【问题讨论】:

不...... MVC 的概念早于网络的创建 @ScottStensland 是的,但是.... 查询中提到的七点是否有效? 使用众多设计模式中的任何一种的关键在于,任何给定的模式都只做一个清晰的重点工作......所以没有设计模式不是应用程序框架 "这是对MVC设计模式的正确理解吗...?"对于没有单一定义的 MVC 这么宽泛的东西没有“正确的理解”。 【参考方案1】:

MVC 模式有很多定义。它随着时间的推移而发展,并在不同的框架和环境中以不同的方式使用。 当它被发明时,没有 HTTP 协议,请求/响应部分也不存在。还有其他一些处理用户请求的方式。随着时间的推移,新的模板引擎被发明出来,HTTP 成为网络上的主导协议。

MVC 被认为是一种纯粹的呈现模式,因为它主要编排视图和模型(无论模型代表什么)。此外,发明 MVC 的主要原因之一是关注点分离。重要的是要保持干净、简短,并让其他层来处理逻辑。

Web 应用程序框架的共同任务是充当 IoC 容器(控制反转)并让其组件担心具体职责。所以如果是web框架的话,大概会有session、cookie、MVC……组件。

    控制器方法只是 HTTP 接口的一个实现。 URL Mapping 可以被视为控制器方法的参数。 请求/响应由 Web 组件(Java 中的 servlet)处理 会话状态由会话组件处理,并且可以由开发人员配置,例如会话过期时间或会话 cookie 类型甚至会话类型(数据库、内存中) 正确 通常框架中都有经过验证的auth组件,但是可以手动编写(不推荐) DB 访问由 Java 中的 JDBC 等持久层处理。 MVC 中的模型负责应在屏幕上呈现或由用户提交的数据。 同5

【讨论】:

以上是关于MVC 模式是不是实现了 Web 框架的常见任务?的主要内容,如果未能解决你的问题,请参考以下文章

使用Spring MVC 框架构造超市订单系统-1总结

php mvc框架的理解

asp.net MVC

Spring MVC总结1

浅谈Java Web经典三层架构和MVC框架模式

三大框架SSH与MVC的设计模式