• JavaWeb开发中的分层思想(一)


    JavaWeb开发分层思想(一)

    一、认识DAO、Service、Controller层

    DAO(Data Access Object)

    1、直接看英文意思就是“数据访问对象”,也就是做一个“接口”

    DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件定义接口实现类,然后就可在模块调用接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类,显得结构非常清晰,DAO层的数据源配置,以及有关数据库连接的参数都在Spring的配置文件中进行配置

    2、简单来说就是Dao层一般用于对数据库的具体操作,包括各种具体的增删改查语句和数据库数据和Java模型的映射。

    Service(中间层、业务逻辑层—做个接口)

    1、Service层主要编写具体业务逻辑,每个Service一般包含一组相关的业务逻辑(比如“用户管理”是一个Service,”文章管理“是一个Service)

    Service层主要负责业务模块逻辑应用设计。同样是首设计接口,再设计其实现,接着在Spring的配置文件配置其实现的关联。这样我们就可以在应用中调用Service接口来进行业务处理。Service层的业务实现,具体要调用到已定义的DAO层的接口,封装Service层的业务逻辑有利于通用的业务逻辑的独立性重复利用性程序显得非常简洁

    Controaller(控制层)

    1、其实相当于Servlet那一层所做的事

    Controller层负责具体业务模块流程控制,在此层里面要调用Serice层的接口来控制业务流程,控制的配置也同样是在Spring的配置文件里面进行,针对具体的业务流程,会有不同的控制器,我们具体的设计过程中可以将流程进行抽象归纳,设计出可以重复利用的子单元流程模块,这样不仅使程序结构变得清晰,也大大减少了代码量。

    二、编写代码

    1、开发代码应该从底层做起,避免代码的繁杂修改以及需求变化。

    Service层是建立在DAO层之上的,建立了DAO层后才可以建立Service层,而Service层又是在Controller层之下的,因而Service层应该既调用DAO层的接口,又要提供接口给Controller层的类来进行调用,它刚好处于一个中间层的位置。每个模型都有一个Service接口,每个接口分别封装各自的业务处理方法

    2、从图中可以看出,我们应该从底层的DAO层到service层到servlet层这个顺序做也就是从底层做起。

    三、关于这些开发层所遇到一些问题

    1、 为什么将Service(Dao)层设为接口层,单独拿出一个ServiceImpl(DaoImpl)作为实现层

    主要还是为了方便项目管理,增加代码的复用性。当项目很大、代码很多时,可能存在多种业务逻辑类似但具体业务有所区别的需求,此时让它们都集成同一个接口层就好了(只是情景之一)

    2、为什么要用service层封装

    这个问题就像Java为什么要分层一样。一般来说,某一个程序的有些业务流程需要连接数据库,有些不需要与数据库打交道而直接是一些业务处理,这样就需要我们整合起来到service中去,这样可以起到一个更好的开发与维护的作用,同时也是MVC设计模式中model层功能的体现

    3、Entity、Pojo、JavaBean和DTO有什么区别?

    Entity:实体bean,一般是用于ORM对象关系映射,一个实体映射成一张表,一般无业务逻辑代码,有些优秀框架中修改entity会直接同步到数据库。JavaBean:是一种Java语言写成的可重用组件,类必须是具体和公共的,并且具有无参数的构造器,可以把数据封装起来,把应用的业务逻辑和显示逻辑分离开,降低了开发的复杂程度和维护成本(说白了就是一种类的规范,符合这种规范的都可以叫JavaBean)。Pojo:简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。DTO:数据传输对象(Data Transfer Object),是一种设计模式之间传输数据的软件应用系统。(其实一般开发很难也不必去感受它们的差别,开发多了感觉就来了)

    4、模型类和VO类分别是什么

    模型类一般都会与数据库一一对应(见上文),但仅有模型类无法满足所有需求场景(多表查询):对于一个商城网站,商品详情页面不仅要显示商品的一般信息,还要显示所属店家信息、店主信息、地理位置……此时数据库商品表中不可能存这么多字段(这会造成很大冗余),解决方案之一就是开发者手动分别查询商品表、店铺表、店主表数据然后将需要的数据拼接在一起传到前端,但这种方法会让开发者浪费不少时间。与此相对的另一个更好的方案是,我们可以将商品详情页需要的数据单独再封装成一个实体类——这便是VO类,我们在想要获取商品详情时单独写一个查询方法对应VO(可以直接将查询结果封装到VO中)便可实现想要的效果。简而言之,模型类对应数据库中“表”,VO类对应前端具体视图(或者说VO类对应数据库中“视图”)

    以上四个问题收藏来源于该博客https://blog.csdn.net/cx776474961/article/details/78467829

    四、关于servlet是什么的问题

    作者:柳树

    链接:https://www.zhihu.com/question/21416727/answer/339012081

    这个提问的最大一个bug,就是以为servlet是很复杂的东西,事实上,servlet就是一个Java接口,interface! 打开idea,ctrl + shift + n,搜索servlet,就可以看到是一个只有5个方法的interface!

    imgimg

    所以,提问中说的网络协议、http什么的,servlet根本不管!也管不着!

    那servlet是干嘛的?很简单,接口的作用是什么?规范呗!

    servlet接口定义的是一套处理网络请求的规范,所有实现servlet的类,都需要实现它那五个方法,其中最主要的是两个生命周期方法 init()和destroy(),还有一个处理请求的service(),也就是说,所有实现servlet接口的类,或者说,所有想要处理网络请求的类,都需要回答这三个问题:

    • 你初始化时要做什么
    • 你销毁时要做什么
    • 你接受到请求时要做什么

    这是Java给的一种规范!就像阿西莫夫的机器人三大定律、行尸走肉里Rick的那三个问题一样,规范!

    servlet是一个规范,那实现了servlet的类,就能处理请求了吗?

    答案是,不能。

    你可以随便谷歌一个servlet的hello world教程,里面都会让你写一个servlet,相信我,你从来不会在servlet中写什么监听8080端口的代码,servlet不会直接和客户端打交道!

    那请求怎么来到servlet呢?答案是servlet容器,比如我们最常用的tomcat,同样,你可以随便谷歌一个servlet的hello world教程,里面肯定会让你把servlet部署到一个容器中,不然你的servlet压根不会起作用。

    tomcat才是与客户端直接打交道的家伙,他监听了端口,请求过来后,根据url等信息,确定要将请求交给哪个servlet去处理,然后调用那个servlet的service方法,service方法返回一个response对象,tomcat再把这个response返回给客户端。

    无论人生上到哪一层台阶,阶下有人在仰望你,阶上亦有人在俯视你。你抬头自卑,低头自得,唯有平视,才能看见真实的自己
  • 相关阅读:
    LeetCode_145.二叉树的后序遍历
    LeetCode_144.二叉树的前序遍历
    LeetCode_142.环形链表 II
    LeetCode_141.环形链表
    LINQ查询表达式---------select子句
    LINQ查询表达式---------where子句
    LINQ查询表达式---------from子句
    System.InvalidOperationException: 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。
    Directory.GetFiles()获取多个类型格式的文件
    System.Exception: ORA-12541: TNS: 无监听程序
  • 原文地址:https://www.cnblogs.com/yuyueq/p/14546053.html
Copyright © 2020-2023  润新知