真正理解、区分Action,Service和Dao功能

在不分层的系统里,我们可以将所有的代码都写到一个地方,比如struts的Action类。在这里,我们不仅要处理页面逻辑,还要做业务逻辑,还要做数据访问。
比如说:
代码如下:
  public String addUser() {
  if(user == null) {
  return FAIL_NO_USER;
  }
  Result result = null;
  if(Role.ADMIN.equals(user.getRole())) {
  result = doSomethingForAdmin(user) ;
  } else {
  result = doSomethingForOthers(user);
  }
  Transaction trans = sess.beginTransaction();
  Query query = sess.createQuery("update Result set level = :level");
  query.setParameter("level", result.getLevel());
  query.executeUpdate();
  trans.commit();
  sess.close();
  return SUCCESS;
  }
  那么上面的代码,哪些部分是页面的部分,哪些是业务处理,哪些是数据访问呢?我认为,这个划分方法是:
Action里只做和页面相关的事,不操作业务对象;
Service不依赖于任何表现技术,不操纵任务用于表现的对象,对于业务对象,尤其是跨多个业务对象的操作,要放到Service里面来;
最后,单纯的业务对象的存取,组装放到DAO里完成。上面所说的业务对象,就是像上例中role, result等和业务相关的对象,而SUCCESS, inputID等,则是页面相关的部分。因些,可以将上例改为:
  public String addUser() {
  if(user == null) {
  return FAIL_NO_USER;
  }
  Result result = service.process(user);
  dao.update(result);
  return SUCCESS;
  }
  在service里:
  public Result process(User user) {
  Result result = null;
  if(Role.ADMIN.equals(user.getRole())) {
  result = doSomethingForAdmin(user) ;
  } else {
  result = doSomethingForOthers(user);
  }
  return result;
  }
  在dao里:
  public void update(Result result) {
  Transaction trans = sess.beginTransaction();
  Query query = sess.createQuery("update Result set level = :level");
  query.setParameter("level", result.getLevel());
  query.executeUpdate();
  trans.commit();
  sess.close();
  }
  这样分层,看起来会显得很麻烦,但事实上确实是大有好处,
首先:
  代码更易读。每一层的每个方法的意义和目的更加明确,读以起来受的干扰更少。
  拆开后的每一层都更容易测试。
  具体如何分层,还需要在开发中,多多体会,这没有绝对的界限,也许一开始放在action里的页面的控制后来会上升为业务规则,并被其它地方重用,然后被移入service;也许某一块对数据的存取也变得非常复杂,包含了业务逻辑,然后被移入service;也有可能发现以前写的service 根本没有想像的那样的业务逻辑,只是帮助做了一些页面的流程控制,然后被重构成Action的一个方法,等等。

在ssh框架中请说出service,action,jsp,formbeam,dao的调用顺序
推荐答案2011-4-12 17:22
jsp发起请求。 .DO
actionform封装请求参数。
action接受请求,并接受封装好的actionfrom
action调用service。
service经过业务逻辑处理之后随后调用DAO
DAO对数据库进行CRUD。
OK咯!

转载于:https://www.cnblogs.com/cyy-13/p/5718602.html

真正理解、区分Action,Service和Dao功能相关推荐

  1. Action Service Dao三层的功能划分

    1. Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的.         Service是管理具体的功能的.         Action只负责管理 ...

  2. java dao service实例_浅谈Action+Service +Dao 功能

    1. Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. D ...

  3. [转]Java Web基础——Action+Service +Dao三层的功能划分

    原文地址:http://blog.csdn.net/inter_peng/article/details/41021727 参考来源:http://www.xuebuyuan.com/2153333. ...

  4. Action+Service +Dao三层的功能划分

    来源:http://blog.csdn.net/inter_peng/article/details/41021727 1. Action/Service/DAO简介: Action是管理业务(Ser ...

  5. vo、dto、bo、do、po的概念理解以及与controller、service、dao层的对应关系

    目录 概念 关于do的理解 业务逻辑分层 基于springboot的逻辑分层结构 什么时候需要定义这么多O 实际项目中的使用方式 同一微服务中 不同微服务 一般起名规则 概念 VO(View Obje ...

  6. Spring中的Controller ,Service,Dao是不是线程安全的?

    作者:myseries cnblogs.com/myseries/p/11729800.html 结论:不是线程安全的 Spring容器中的Bean是否线程安全,容器本身并没有提供Bean的线程安全策 ...

  7. Struts2 + Spring + Hibernate 通用 Service 和 DAO

    我在 Struts2 + Spring + Hibernate  项目开发中总结出了一个Service 和 DAO ,可以用于处理任何的pojo(bean).使用这两个Service 和 DAO 可以 ...

  8. junit 测试 dao_JUnit测试Spring Service和DAO(带有内存数据库)

    junit 测试 dao 这篇文章描述了如何为Spring Web Application的Services和DAO实现JUnit测试. 它建立在Spring MVC-Service-DAO-Pers ...

  9. 让人上瘾的新一代开发神器,彻底告别Controller、Service、Dao等方法

    大家好,我是宝哥! 目录 初衷 特性 传统开发步骤 演示说明 初衷 用尽可能简单的方式,完成尽可能多的需求.通过约定的方式实现统一的标准.告别加班,拒绝重复劳动,远离搬砖. 特性 如下: 用于快速开发 ...

最新文章

  1. 如何用xmanager远程连接centos6.0的桌面
  2. R语言构建xgboost模型:模型的保存(xgb.save)和加载(xgb.load)、或者保存为R二进制文件(xgb.save.raw R binary vector)
  3. linux服务器LVS/DR模式+nfs
  4. 【计算理论】计算复杂性 ( 计算理论内容概览 | 计算问题的有效性 | 时间复杂性度量 | 输入表示 | 时间复杂度 )
  5. 【强化学习】深度强化学习入门介绍
  6. 设计一个可扩展的用户登录系统
  7. 【clickhouse】 clickhouse配置查询记录query_log
  8. LeetCode 951. Flip Equivalent Binary Trees
  9. 哈工大2019计算机专业录取分数线,哈尔滨工业大学2019年高考分省分专业录取分数线...
  10. AI 图像识别项目从入门到上线
  11. pano2vr输出的HTML手机可以看吗,Pano2VR怎么导出手机可看, Pano2VR导出手机查看教程...
  12. Java单身狗,java 的23种设计模式 之单身狗和隔壁老王的故事
  13. SwiftUI vs 故事板
  14. 图片怎样调整分辨率?如何在线修改分辨率?
  15. 太火爆了!这一款小游戏火到把服务器搞瘫痪,合成大西瓜
  16. java中to date_Java Date toInstant()用法及代码示例
  17. Shiro 第十七章 OAuth2集成
  18. GNOME 技术综述(转)
  19. Oracle数据库Timestamp数据差值计算Sql语句
  20. 程序自我保护 c语言编程,C语言时尚编程百例

热门文章

  1. 手机版的python-python手机版
  2. python画树叶-用python画树叶
  3. python3.7.2使用-centos7系统下python2与python3共存
  4. 如何系统的自学python 知乎-作为小白,如何系统的自学PythonWeb开发?
  5. python turtle画彩虹-python绘制彩虹图
  6. 学好python工资一般多少钱-Python工资多少?就业发展前景怎么样?
  7. python和c++哪个好学-C++和Python哪一个更好?
  8. python使用什么注释语句和运算-怎么使用python注释语句
  9. python流程控制语句-Python中流程控制语句的详细介绍
  10. python基本使用-Python time库基本使用方法分析