JAVAEE企业级应用开发浅谈第一辑
不积跬步无以至千里,不积小流无以成江海
Step1.情景概要
作为一个JAVA WEB 开发人员,在开发web 项目时项目大家都有自己的一些新的体会,对于web 开发出现的一些比较经典的名词大家都会有所了解,今天我们就来聊聊JAVA WEB 开发中的三层架构与MVC。
Step2.编程思维的转变
回想个人在JAVA WEB学习阶段,MVC思想没有建立之前,个人在实现网站用户登录功能的痛苦经历时,还是颇有感想,当时的实现方式现在想来不得不佩服当时的这种勇气,将登录的数据访问层代码,登录业务逻辑处理的代码以及登录参数获取视图转发控制的代码全部柔和到了一个Servlet 中进行处理,当然功能实现上是没有任何问题的,能够实现用户登录的功能,这个流程画图描述下来如下:
仔细思考整个登录过程代码实现,发现整个登录servlet 代码虽说实现了登录功能,但是代码处理上是显得相当臃肿,并且耦合度较大,servlet 中包含了参数接收,校验,jdbc 操作,用户存在性与密码匹配校验以及视图转发控制,这就相当于把servlet 变为了一个超级战士,所向披靡,无所不能,确实厉害不少!
但是从开发的角度来说这种编码方式对于后续开发弊端也显得相当明显,比如后续想要加入登录时用户积分的计算(连续登录三天,五天等情况积分业务添加),查询数据时添加缓存处理等等其他新的业务,此时则不得不打开登录servlet代码,定位到指定代码块添加新的代码,然后测试,再发布,这样下来虽说功能能够实现,但代码的臃肿程度将变得越来越大,同时业务处理的代码变得越来越复杂,更加不便于后续代码维护,这种维护的工作量将是巨大的。
接下来继续分析这个道理过程,仔细考虑当前登录代码,将登录代码拆分来看的话,分析如下:
通过上图可以看出 现在的代码结构就可以参照这个思路来拆分三块:
Web 端:获取请求参数;
Service 端:处理具体业务;
Jdbc 端:使用jdbc 来实现数据库访问操作
Step3.三层思想建立分析
如此,登录代码结构分析图可调整为下图:
通过上图可以看到:图例看似复杂,实际上已经将登录servlet 原始代码解耦出来,原来的代理servlet 不再是大而全的超能战士,而是将其职责进行了分离,原有的登录逻辑与jdbc 访问数据库操作代码进行职责分离,实现了代码功能解耦,同时方便了后续的代码维护操作,此时的代码变得相对清晰起来,体现了面向对象中高内聚,低耦合的思想,那这样的一种代码书写方式在java 世界有一个专有名词-三层架构,简图如下:
通过以上分析可以看出:
处理登录的过程 通过三层架构思想来进行代码编写,思路就很清晰明了啦
- 界面层(View) 即登录表单页面jsp
- 业务逻辑处理
登录servlet
2.1 接收登录参数
2.2 调用service 处理层相关处理方法并接收处理结果
2.3 控制登录结果视图转发
Service
用户名、密码参数校验
用户记录查询 并校验用户记录存在
密码加密匹配
返回登录结果模型数据
- 数据访问层
Dao 层
借助jdbc 实现数据访问操作
写到这里,想必大家对三层架构的理解应该很明确了,那么它与MVC 思想到底有什么关联呢,后续将会为大家继续呈上,敬请关注上海尚学堂java。
JAVAEE企业级应用开发浅谈第一辑的更多相关文章
- JAVAEE企业级应用开发浅谈第二辑:MVC和三层架构
上海尚学堂警句:一份信心,一份努力,一份成功:十分信心,十分努力,十分成功. Step1.情景概要 Hello,小伙伴们,昨天跟大家分享了JAVA EE 企业级应用开发中大家耳熟能详的概念-三层架构, ...
- JAVAEE企业级应用开发浅谈之MVC 中的V-VIEW视图
Step1.情景概要 Hello,小伙伴们,好久不见,之前跟大家分享了三层架构与MVC思想,相信大家对于这两块内容有了相对清晰的个人认识了,既然我们讲到了MVC,这里我们接着这块内容继续往下深入,今天 ...
- Android开发-浅谈架构(二)
写在前面的话 我记得有一期罗胖的<罗辑思维>中他提到 我们在这个碎片化 充满焦虑的时代该怎么学习--用30%的时间 了解70%该领域的知识然后迅速转移芳草鲜美的地方 像游牧民族那样.原话应 ...
- Python测试开发-浅谈如何自动化生成测试脚本
Python测试开发-浅谈如何自动化生成测试脚本 原创: fin 测试开发社区 前天 阅读文本大概需要 6.66 分钟. 一 .接口列表展示,并选择 在右边,点击选择要关联的接口,区分是否要登录, ...
- springboot开发浅谈 2021/05/11
学习了这么久,本人希望有时间能分享一下,这才写下这篇浅谈,谈谈软件,散散心情. 这是本人的博客园账号,欢迎关注,一起学习. 一开始学习springboot,看了好多网站,搜了好多课程.零零落落学了一些 ...
- J1001.Java原生桌面及Web开发浅谈
自从Java问世以来,在服务端开发方面取得了巨大的发展.但是在桌面/Web开发方面,一直没有得到大的发展.从最初的AWT,到Swing,再到JavaFX,Java从来没有在桌面/Web解决方案中取得重 ...
- Delphi 组件渐进开发浅谈(一)——由简入繁
最近业余时间在写游戏修改器玩,对于Delphi自带的组件总觉得差强人意,需要书写大量冗余代码,如果大量使用第三方组件,在以后的移植和与他人交互时也不是很方便,因此便产生了自己封装组件的想法. 实际上这 ...
- .NET项目开发—浅谈面向对象的纵横向关系、多态入口,单元测试(项目小结)
阅读目录: 1.开篇介绍 2.使用委托消除函数串联调用 2.1.使用委托工厂转换两个独立层面的对象 3.多态入口(面向对象继承体系是可被扩展的) 4.多态的受保护方法的单元测试(Protected成员 ...
- .NET项目开发—浅谈面向接口编程、可测试性、单元测试、迭代重构(项目小结)
阅读目录: 1.开篇介绍 2.迭代测试.重构(强制性面向接口编程,要求代码具有可测试性) 2.1.面向接口编程的两个设计误区 2.1.1.接口的依赖倒置 2.1.2.接口对实体的抽象 2.2.迭代单元 ...
随机推荐
- 团队作业10——事后分析(Beta版本)
团队作业10--事后分析(Beta版本) 目录 一.设想与目标 二.计划 三.资源 四.变更管理 五.设计与实现 六.测试与发布 七.总结 八.图片和贡献分分配 一.设想和目标 1.我们的软件要解决什 ...
- 【1414软工助教】博客链接和coding链接
某些同学提供的coding.net用户名无法访问.请同学们自己点击自己的两个链接,如果发现有错,请在本博客的评论区给出正确的链接. 格式为: 学号后3位 链接 例如:***502 https://co ...
- 201521123013 《Java程序设计》第3周学习总结
1. 本章学习总结 2. 书面作业 Q1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...
- 201521123113 《Java程序设计》第2周学习总结
1.本周学习总结 学习了各种java数据类型以及各种运算符的使用 string类之所以好用是因为这是人可以看得懂的类型,操作简便 Scanner扫描器与标准输出输入用法上的不同,Scanner较标准输 ...
- 201521123113《Java程序设计》第11周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 Q1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) ...
- 201521123108《Java程序设计》第12周学习总结
1. 本周学习总结 2. 书面作业 将Student对象(属性:int id, String name,int age,double grade)写入文件student.data.从文件读出显示. Q ...
- Java:实现对象的比较 comparable接口和comparator接口
在实际应用中,我们往往有需要比较两个自定义对象大小的地方.而这些自定义对象的比较,就不像简单的整型数据那么简单,它们往往包含有许多的属性,我们一般都是根据这些属性对自定义对象进行比较的.所以Java中 ...
- 深度学习(一)cross-entropy softmax overfitting regularization dropout
一.Cross-entropy 我们理想情况是让神经网络学习更快 假设单模型: 只有一个输入,一个神经元,一个输出 简单模型: 输入为1时, 输出为0 神经网络的学习行为和人脑差的很多, 开始学习 ...
- 归纳一下input中span提示以及input中onchange事件
一.当input中不含有onclick事件的时候 定义一个class为tip1的span: <td><input type=text name='POSTNAME' nameVal ...
- python之socket--粘包补充
struct补充 import struct import json header_dic={'total_size':123123, 'filename':None, 'md5':None} hea ...