以javaweb和asp.net为例 解析三层架构与MVC模式

以javaweb和asp.net为例 解析三层架构与MVC模式

1. 什么是系统架构
所谓系统架构是指,整合应用系统程序大的结构。经常提到的系统结构有两种:三层架构与 MVC。这两种结构既有区别,又有联系。但这两种结构的使用,均是为了降低系统模块间的耦合度。

2. 什么是三层架构
三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。

三层架构的另一种命名方式(本质是一样):视图层 View、服务层 Service,与持久层 DAO。

分层命名 英文简称 作用
视图/界面/表示层 UIL / View 主要功能是显示数据和接受传输用户的数据。简单来说就是:用于接收用户提交请求的代码。
服务/业务逻辑层 BLL / Service 将用户的输入信息进行甄别处理,分别保存。建立新的数据存储方式,在存储过程中对数据进行读取。简单来说就是:实现系统的业务逻辑的代码。
持久/数据访问层 DAL / DAO 数据访问层在作业过程中访问数据系统中的文件,实现对数据库中数据的读取保存操作。简单来说就是:直接操作数据库的代码。

为了更好的降低各层间的耦合度,在三层架构程序设计中,采用面向抽象编程。即上层对下层的调用,是通过接口实现的。而下层对上层的真正服务提供者,是下层接口的实现类。服务标准(接口)是相同的,服务提供者(实现类)可以更换。这就实现了层间解耦合。

3. 什么是MVC模式
MVC模式,即 Model 模型、View 视图,及 Controller 控制器。

微软官方对MVC的解释
模型:
MVC 应用程序的模型 (M) 表示应用程序和任何应由其执行的业务逻辑或操作的状态。 业务逻辑应与保持应用程序状态的任何实现逻辑一起封装在模型中。 强类型视图通常使用 ViewModel 类型,旨在包含要在该视图上显示的数据。 控制器从模型创建并填充 ViewModel 实例。
视图:
视图 (V) 负责通过用户界面展示内容。 它们使用 Razor 视图引擎在 HTML 标记中嵌入 .NET 代码。 视图中应该有最小逻辑,并且其中的任何逻辑都必须与展示内容相关。 如果发现需要在视图文件中执行大量逻辑以显示复杂模型中的数据,请考虑使用 View Component、ViewModel 或视图模板来简化视图。
控制器:
控制器 ©是处理用户交互、使用模型并最终选择要呈现的视图的组件。在MVC应用程序中,视图仅显示信息;控制器处理并响应用户输入和交互。在MVC模式中,控制器是初始入口点,负责选择要使用的模型类型和要呈现的视图(它控制应用如何响应给定请求)。

备注:控制器不应由于责任过多而变得过于复杂。 要阻止控制器逻辑变得过于复杂,请将业务逻辑推出控制器并推入域模型。

4. MVC 架构程序的工作流程
用户通过 View 页面向服务端提出请求,可以是表单请求、超链接请求、AJAX 请求等;服务端 Controller 控制器接收到请求后对请求进行解析,找到相应的 Model 对用户请求进行处理;Model 处理后,将处理结果再交给 Controller;Controller 在接到处理结果后,根据处理结果找到要作为向客户端发回的响应 View 页面。页面经渲染(数据填充)后,再发送给客户端。

5. 三层架构+MVC的项目结构
以JAVA三层架构+MVC的项目为例
在这里插入图片描述
项目文件位于src/main目录下,程序源码为与java目录下,资源文件位于resources目录下,前端页面(jsp)位于webapp目录下。

三层架构:
在java目录下含域名翻转+项目组件包(com.dx.login.demo),该包下含各分层包,数据访问层(dao)、业务逻辑层(service)、视图层后台(web),webapp(与java目录同级)目录为视图层的前端,在该目录下包含前端页面文件。Java目录和webapp目录下分别是java代码和html代码,分类如此。

MVC模式:
在webapp目录下含jsp页面即为(view),在视图层的后台(web)包下含控制器(controller)和模型(model),三者构成MVC。注意:MVC三者均位于视图层
注:此处的model或与可以叫做viewmodel。
其余如commons通用类包、filter过滤器包等为附加包,不影响系统架构。

以ASP.NET三层架构+MVC项目为例
在这里插入图片描述
VisualStudio的项目结构为解决方案下含项目的结构,解决方案为整个大项目,下含的各个项目为大项目的分层,对应java项目中的package包,由于Asp.net MVC不再基于文件目录结构,而是将URL映射到控制器中,因此不再需要域名翻转等外层package包。

三层架构:
该解决方案下的BLL包为业务逻辑层,DAL包为数据访问层,实体类/Model(对应java项目中的entity)与业务逻辑和数据访问并列,以上分层均采用类库(.dll)格式输出。

MVC模式:
该解决方案下的dmtodo包为网站包,对应三层架构中的视图层(UIL),在该包下含M(模型或者叫视图模型)、V(视图)、C(控制器)三个程序目录,以及其他附加目录。

参考资料:
https://funtl.com/zh/mvc/#%E6%9C%AC%E8%8A%82%E8%A7%86%E9%A2%91
https://baike.baidu.com/item/%E4%B8%89%E5%B1%82%E6%9E%B6%E6%9E%84/11031448?fr=aladdin
https://blog.csdn.net/LyySwx/article/details/78936825

发布了13 篇原创文章 · 获赞 2 · 访问量 2017
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章