1.Controller层:接口层,用户访问请求时对接。

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

2.dao层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,

DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类,显得结构非常清晰,DAO层的数据源配置,以及有关数据库连接的参数都在Spring的配置文件中进行配置。

3.domain层:通常就是用于放置这个系统中,与数据库中的表,一一对应起来的JavaBean的

domain的概念,通常会分很多层,比如经典的三层架构,控制层、业务层、数据访问层(DAO),此外,还有一个层,就是domain层。

model层:和domain区别;可能都是javaBean,

这个区别是用途不同,domain通常就代表了与数据库表--一一对应的javaBean,

model通常代表了不与数据库一一对应的javaBean,但是封装的数据是前端的JS脚本,需要使用的数据

4.service层:Service层主要负责业务模块的逻辑应用设计。

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

5.view视图层:此层与控制层结合比较紧密,需要二者结合起来协同工发。View层主要负责前台jsp页面的表示。

问题一:Service层并没有做什么实际的工作,只是接受了Servlet,同时又调用了Dao。它本身并没有什么实际意义的代码,只是接收,调用。

很显然,这样增加了代码量。当然,我很轻易感受到了。但是它的优点是什么呢?不可能没有优点的情况下仅仅是为了增加代码量吧?

问题的思考

关于 Service 层存在的意义

1.Service被称作业务层。顾名思义,它处理逻辑上的业务,而不去考虑具体的实现。

2.对于MVC模式,MVC本身并不属于设计模式的一种,它是一种设计结构,这种结构的最终目的是为了解耦,也就是不同逻辑层的代码自身改变的时候,你别影响其他层。在写项目的时候,不同的逻辑上的代码之间的解耦是很重要的。

那很显然,为了使得我们在写代码的时候,不同的逻辑层内的代码之间的关联降低到最小,我们需要在不同的逻辑层之间加一些缓冲的层来达到一些解耦的效果。

3.比如,你在视图层,不会直接去调用Dao层。

那么对于Service,就是 Servlet 和 Dao 层之间缓冲的层。通过这一层来进行解耦,使得 Dao 层内的变化不会直接影响到 Servlet 层。

例如一个 sql 语句如果需要拼接,比如说是模糊查询, 则 sql 语句需要根据用户选择的条件来进行拼接。那么,拼接这个 sql 语句的逻辑部分,就放在 service 层进行。而 Dao 层,只负责接收拼接之后的最终的 sql 语句。

最后,service 也不是就非他不可。对于极小的项目而言,加了service层,反而增加了代码量,而且Dao层种以及预见了可能出现的情况,并进行了相应的扩展。那么,此时,既不需要了。当然,大型项目可能无法在Dao层内做到这些(我也没接触到过大型项目),就需要service了。

最终的目的也就两个词:解耦,便于扩展

java domain层_java框架中的controller层、dao层、domain层、service层、view层相关推荐

  1. php中yii的controller,详解PHP的Yii框架中的Controller控制器,yiicontroller

    详解PHP的Yii框架中的Controller控制器,yiicontroller 控制器是 MVC 模式中的一部分, 是继承yii\base\Controller类的对象,负责处理请求和生成响应. 具 ...

  2. java的成员方法_java编程中的成员方法是什么?

    DIEA 成员方法描述对象所具有的功能或操作,反映对象的行为,是具有某种相对独立功能的程序模块.它与过去所说的子程序.函数等概念相当.一个类或对象可以有多个成员方法,对象通过执行它的成员方法对传来的消 ...

  3. java runnable 异常_JAVA 线程中的异常捕获

    在java多线程程序中,所有线程都不允许抛出未捕获的checked exception(比如sleep时的InterruptedException),也就是说各个线程需要自己把自己的checked e ...

  4. java swing背景_java Swing中添加背景图片(总结)

    在java GUI图形化设计中,Swing组件添加背景图片主要有两中情况:1,在Jpanl面板中添加背景图片,2,在jLable中添加背景图片 首先介绍一种最巧妙的背景图片添加方法, 1.利用JLab ...

  5. 【Java 新建项目】使用程序对新项目的各个实体 创建Dao、DaoImpl、Service、ServiceImpl层的文件...

    优化之后的步骤: 1.第一步 生成各层文件夹,并且创建GenericDao.java等基础dao[基础dao中涉及到的包名等自行更改] 2.第二步 生成各个实体对应的Dao等层文件 首先给出基本Dao ...

  6. java web dao层_java web 中web层直接调用dao层 可以吗?

    这个就跟Service直接用Java类还是用Interface/Implementation一样.关键是你自己认为是否合理,团队是否有严格要求. 为了说明这个问题,我在网上找了一些图. web层,业务 ...

  7. java ao层_Java学习过程中的一些记录 DO、DTO、BO、AO、VO、POJO定义 | 酷客365

    分层领域模型规约: DO( Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象. DTO( Data Transfer Object):数据传输对象,Service或Ma ...

  8. android xml java混合编程_Java学习中注解与多线程,网络编程与XML技术

    本部分内容主要有集合框架及泛型,实用类,输入和输出处理,注解与多线程,网络编程与XML技术.初次学习这部分会感觉很难,主要是概念难于理解,最好是多看看例子,多练习.下面是个人的总结 拉勾IT课小编为大 ...

  9. java optional 用法_Java 8中的Optional: 如何正确使用?

    Java 8中出现一个新的Optional类型,和其他语言中null的替代品类似. 本文将讨论如何使用这种新类型,即它的主要用例是什么. 什么是Optional类型? Optional是对单个对象包装 ...

最新文章

  1. cmd开无线服务器,使用cmd命令开启wifi
  2. 弹出层,div的写法
  3. 学习 .net 的一些主要网站
  4. 基于Java语言构建区块链(四)—— 交易(UTXO)
  5. php 文件扫描去重,PHP中的去重方法详解和文件下载
  6. 凝血酶分子机器人_了不得!这个机器人可以拟制癌细胞生长
  7. 压力测试和负载测试区别_如何理解与区分软件性能测试、负载测试、稳定性测试、压力测试...
  8. linux如何映射Windows下的磁盘为网络盘
  9. ubuntu无密码登录
  10. 我从大厂面试中学到的关于 C# 的知识
  11. 基于Qt搭建ROS开发环境
  12. 【HTML+CSS网页设计与布局 从入门到精通】第7章-class、ID选择器,CSS格式
  13. 【转】webpack中关于source map的配置
  14. 【报告分享】2020年抖音美妆直播报告.pdf(附下载链接)
  15. 从“一时红”到“持久火”,“网红”农产品如何越向“长红”?
  16. SAE 搭建微信公众平台
  17. Python札记 -- 参数魔法
  18. ch376inc.h
  19. 论文笔记(八):360 VR Based Robot Teleoperation Interface for Virtual Tour
  20. 黑马电商项目初始化学习笔记

热门文章

  1. Linux进阶 vim grep sed awk 正则表达式
  2. Linux下测试的c++的使用
  3. import 别名_python中的import、from import以及import as的区别
  4. r语言ggplot2一夜多图_ggplot2简介
  5. python list numpy array 互转
  6. pandas UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xb1 in position 0: invalid start byte
  7. tf.estimator的用法
  8. 在C++中使用LLVM的JIT功能进行代码优化:Optimization passes--PassManagerBuilder
  9. 在树莓派上安装AdGuardHome当DNS服务器,来屏蔽广告和追踪的DNS请求
  10. centos7 解决chrome提示您的连接不是私密连接的方法