做海报有什么好的网站推荐,自己的电脑做网站,企业维护,建站之星网站目录
一、应用分层
1、介绍
#xff08;1#xff09;为什么需要应用分层#xff1f;
#xff08;2#xff09;如何分层#xff1f;#xff08;三层架构#xff09;
MVC 和 三层架构的区别和联系
高内聚#xff1a;
低耦合#xff1a;
2、代码重构
controlle…目录
一、应用分层
1、介绍
1为什么需要应用分层
2如何分层三层架构
MVC 和 三层架构的区别和联系
高内聚
低耦合
2、代码重构
controller表现层
service业务逻辑层
dao数据层
model实体类
3、应用分层的好处
二、企业规范
三、学习Spring MVC的总结 之前写了几个简单的练习图书管理系统、留言板...这些只是一点简单的开发但代码也显得比较乱下图是几个类的分区如图 那如果要把完整的图书管理系统开发完了呢那就会更加乱了。所以下面要学习应用分层把代码管理好。 应用分层类似公司的组织架构 公司初创阶段人比较少一个人会身兼数职即做财务又做人事等等。随着公司的逐渐壮大会把岗位进行细分会划为财务部门、人事部门、行政部门等等。 项目开发也是类似最开始功能简单时前后端放在一起开发但随着项目功能的复杂我们分为前端和后端不同的团队甚至更细粒度的团队。后端开发也会根据功能再进行细分。MVC就是其中的一种拆分方式。 随着后端人员不再涉及前端后端开发又有了新的分层方式。 一、应用分层
1、介绍 阿里开发手册中关于工程结构部分定义了常见工程的应用分层结果如图 应用分层 是一种软件开发设计思想它将应用程序分成N个层次这N个层次分别负责各自的职责多个层次之间协同提供完整的功能。根据项目的复杂度把项目分成三层四层或者更多层。其中常见的MVC设计模式就是应用分层的一种具体体现。
1为什么需要应用分层 在最开始的时候为了让项目快速上线我们通常是不考虑分层的。但是随着业务越来越复杂大量的代码混在一起会出现逻辑不清楚、代码扩展性插、改一处导致处处改等问题。学习对项目的分层也是程序员的必修课。
2如何分层三层架构 前面学习了MVC把整体分成了三个层次View视图、Controller控制器、Model模型也就是将用户视图和业务处理隔离开并且通过控制器连接起来很好的实现了表现和逻辑的解耦。是一种标准的软件分层架构。如图 目前现在更主流的开发方式是 “前后端分离” 的方式后端开发工程师不再需要关注前端的实现所以对于Java后端开发者又有了一种新的分层架构把整体架构分为表现层、业务逻辑层、数据层。这种分层方式也称之为 “三层架构”。 1、表现层就是展示数据结果和接受用户指令的是最靠近用户的一层。 2、业务逻辑层负责处理业务逻辑里面有复杂业务的具体实现。 3、数据层负责存储和管理应用程序相关的数据。 之前写的图书管理系统就没有按照上述的设计思想而是代码大杂烩如图 按照上面的层次划分Spring MVC 站在后端开发人员的角度上也进行了支持把上述代码划分为三个部分 1、请求处理、响应数据负责接受页面的请求给页面响应数据。 2、逻辑处理负责业务逻辑处理的代码。 3、数据访问负责业务数据的维护操作包括增、删、改、查。 这三个部分在Spring的实现中都有体现如图 1、Controller控制器。接收前端发送的请求对请求进行处理并且响应数据。 2、Service业务逻辑层。处理具体的业务逻辑。 3、Dao数据访问层也称为持久层。负责数据访问操作包括数据的增、删、改、查。 MVC 和 三层架构的区别和联系 从概念上来说二者都是软件工程领域中的架构模式。 MVC架构模式由三部分组成View视图、Controller控制器、Model模型 三层架构将业务应用划分为表现层、业务逻辑层、数据访问层 MVC中的视图和控制器对应三层架构中的表现层。MVC中的模型对应三层架构中的业务逻辑层、数据层、实体类。 二者都是从不同角度对软件工程进行了抽象。 MVC模式强调数据和视图分离将数据展示和数据处理分开。控制器是它们之间的桥梁通过控制器对两者进行组合。 三层架构强调不同维度数据处理的高内聚和低耦合将交互界面、业务处理、数据库操作的逻辑分开。 角度不同也就谈不上互相替代了在日常的开发中可以经常看到两种共存的情况。比如我们设计模式的时候往往也会拆分出业务逻辑层Service层和数据访问层到层。 但两者的目的都是相同的都是为了“解耦分层代码复用”。、 软件设计原则高内聚低耦合
高内聚 一个模块中各个元素之间的联系的紧密程度如果各个元素语句、程序段之间的联系程度越高则内聚性越高即 “高内聚”。 低耦合 软件中各个层、模块之间的依赖关联程序越低越好。修改一处代码其他模块的代码改动越少越好。 那么高内聚和低耦合矛盾吗其实不矛盾高内聚是指一个模块中的各个元素之间的紧密程度低耦合是指各个模块之间的精密程度。如图 好比在公司里不同部门之间的关联性要尽可能小一个小部分发生问题了要尽可能降低对其他部门的影响这就是低耦合而当一个部门里出现问题时这个部门之间的员工关系要经可能的紧密遇到问题一起解决、克服这就是高内聚。
2、代码重构 上篇博客写了图书管理系统但是代码非常乱现在进行代码重构先创建对应包的路径如图 controller表现层
RestController
RequestMapping(/book)
public class BookController {RequestMapping(/getBookList)public ListBookInfo getBookList() {BookService bookService new BookService();return bookService.getBookList();}
}
RestController
RequestMapping(/user)
public class UserController {RequestMapping(/login)public String login(String userName, String password, HttpSession session) {//1、校验参数//2、校验密码是否正确//3、返回响应结果System.out.println(userName password);if(!StringUtils.hasLength(userName) || !StringUtils.hasLength(password)) {return 用户名或者密码为空;}if(!admin.equals(userName) || !admin.equals(password)) {return 账号或密码错误;}session.setAttribute(userName, userName);return ;}
}
原本这里面的数据也是要从数据库里拿的还有逻辑判断但是还没学到数据库的使用先不管。
service业务逻辑层
public class BookService {public ListBookInfo getBookList() {BookDao bookDao new BookDao();ListBookInfo bookInfos bookDao.mockData();for(BookInfo bookInfo : bookInfos) {if(bookInfo.getStatus() 2) {bookInfo.setStatusCN(不可借阅);} else {bookInfo.setStatusCN(可借阅);}}return bookInfos;}
}
dao数据层
public class BookDao {public ListBookInfo mockData() {//理论上应该从数据库中获取数据当前采用mock方式ListBookInfo bookInfos new ArrayList();for (int i 1; i 15; i) {BookInfo bookInfo new BookInfo();bookInfo.setId(i);bookInfo.setBookName(图书 i);bookInfo.setAuthor(作者 i);bookInfo.setNum(i * 2 1);bookInfo.setPrice(new BigDecimal(i * 3));bookInfo.setPublishName(出版社 i);if(i % 5 0) {bookInfo.setStatus(2);
// bookInfo.setStatusCN(不可借阅);} else {bookInfo.setStatus(1);
// bookInfo.setStatusCN(可借阅);}bookInfos.add(bookInfo);}return bookInfos;}
}
model实体类
Data
public class BookInfo {private Integer id;private String bookName;private String author;private Integer num;private BigDecimal price;private String publishName;private Integer status;//1-可借阅 2-不可借阅private String statusCN;//状态的中文含义
}
3、应用分层的好处 1降低层与层之间的依赖结构更加的明确利于各层逻辑的复用。 2开发人员可以只关注整个结构中的其中某一层极大地降低了维护成本和维护时间。 3可以很容易的用新的实现来替换原有层次的实现。 4有利于标准化。 二、企业规范 1、类名使用大驼峰风格但以下情形例外DO / BO / DTO / VO / AO。 2、方法名、参数名、成员变量、局部变量统一使用小驼峰风格。 3、包名统一使用小写点分隔符之间有且仅有一个自然语义的英语单词。 常见命名风格 大驼峰所有单词首字母都需要大写又叫帕斯卡命名发比如UserController。 小驼峰除了第一个单词其他单词首字母大写比如userController。 蛇形用下划线_作用单词间的分隔符一般小写又叫下划线命名法比如user_controller。 串形用短横线-作用单词间的分隔符又叫脊柱命名法例如user-controller。 三、学习Spring MVC的总结
1、学校Spring MVC其实就是学习各种Web开发需要用到的注解 a、RequestMapping路由映射 b、RequestParam后端参数重命名 c、RequestBody接收JSON类型的参数 d、PathVariable接收路径参数 e、RequestPart上传文件 f、ResponseBody返回数据 g、CookieValue从Cookie中获取值 h、SessionAttribute从Session中获取值 i、RequestHeader从Header中获取值 j、Controller定义一个控制器Spring框架启动时加载把这个对象交给Spring管理。默认返回视图。 k、RestControllerResponseBody Controller 返回数据 2、Cookie和Session都是会话机制Cookie是客户端机制Session是服务端机制。二者通过SessionId来关联。Spring MVC 内置 HttpServletRequestHttpServletResponse两个对象。需要使用时直接在方法中添加对应参数即可Cookie和Session可以从HttpServletRequest中来获取也可以直接使用HttpServletResponse设置Http响应状态码。
3、JavaEE 学习阶段会涉及较多工具插件的学习来帮助我们提高开发效率比如Postman、lombok、EditStarter后面还会继续学习其他的工具或插件。 都看到这了点个赞再走吧谢谢谢谢谢