其实,结构化程序设计强调应用程序模块化,模块之间低耦合,模块内部高度聚合。而MVC(Model-View-Control)就是这一思想的延伸。MVC最初用于分析分布式应用程序的特征,通过将应用程序分割成控制器、视图、模型等若干逻辑部件,保证程序设计更加容易。
MVC模型提供了一种按功能对各种维护和表现数据的对象进行分割的方法,其目的是为了将各种对象间的藕合程度减至最低。MVC模式将传统的输入、处理、输出任务划分方式,运用到图形化用户交互模型,这也适合运用于基于Web的企业级N层应用领域。
在MVC模式中,模型(Model)代表应用程序的数据(Date)和用于控制访问和修改这些数据的业务逻辑规则。当模型发生改变时,它会通知视图,并且允许其查询模型的相关状态。同时,它允许控制器访问封装在模型内部的应用程序。
视图(View)从模型处获得数据并指定这些数据如何表现。当模型变化时,视图负责维持数据表现的一致性,同时将用户请求传递至控制器(Control)。控制器负责定义应用程序的行为,解释视图传递过来的用户请求,并将其映射成相应的行为,而这些行为由模型负责实现。例如,在独立运行的GUI客户端,常见的用户请求包括鼠标单击或菜单选择等操作。而在Web应用程序中,用户请求可表现为来自客户端的GET或POST的HTTP请求。
模型所实现的行为主要有处理业务和修改模型状态。根据用户请求和模型行为的结果,控制器选择某个视图作为对用户请求的答应。业务模块是不依赖用户界面的,这样隔离了用户界面的变更对页面程序的影响。用户界面负责收集用户的输入,显示用户需要的数据;控制器负责将用户的请求调用到实际的业务程序,也将业务程序处理的结果回送给用户界面;业务程序具体处理业务操作。同时业务模块可能主动发送消息到用户界面,通知界面显示数据。
对于电子商务这种典型的Web应用,由于其用户界面是在浏览器上运行,而界面的控制和业务模块在服务器上运行,所以,通常采用这种典型的MVC模式。
Web应用的开发往往是混合的数据编程。最常见的形式就是,直接向数据库发送请求并用HTML显示相应的结果。这种模式下开发速度通常比较快,但由于没有直接分离数据、页面,因而很难体现出业务逻辑模型,更谈不上重用。这必然导致设计的系统弹性小,难以满足用户需求的变化。在MVC设计思想的指导下,对系统这一复杂问题进行分层,虽然要做额外的工作,但系统结构清晰,能够满足稳定、可扩展及可重用等系统结构设计要求。