真正理解、区分Action,Service和Dao功能
真正理解、区分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功能相关推荐
- Action Service Dao三层的功能划分
1. Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理 ...
- java dao service实例_浅谈Action+Service +Dao 功能
1. Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. D ...
- [转]Java Web基础——Action+Service +Dao三层的功能划分
原文地址:http://blog.csdn.net/inter_peng/article/details/41021727 参考来源:http://www.xuebuyuan.com/2153333. ...
- Action+Service +Dao三层的功能划分
来源:http://blog.csdn.net/inter_peng/article/details/41021727 1. Action/Service/DAO简介: Action是管理业务(Ser ...
- vo、dto、bo、do、po的概念理解以及与controller、service、dao层的对应关系
目录 概念 关于do的理解 业务逻辑分层 基于springboot的逻辑分层结构 什么时候需要定义这么多O 实际项目中的使用方式 同一微服务中 不同微服务 一般起名规则 概念 VO(View Obje ...
- Spring中的Controller ,Service,Dao是不是线程安全的?
作者:myseries cnblogs.com/myseries/p/11729800.html 结论:不是线程安全的 Spring容器中的Bean是否线程安全,容器本身并没有提供Bean的线程安全策 ...
- Struts2 + Spring + Hibernate 通用 Service 和 DAO
我在 Struts2 + Spring + Hibernate 项目开发中总结出了一个Service 和 DAO ,可以用于处理任何的pojo(bean).使用这两个Service 和 DAO 可以 ...
- junit 测试 dao_JUnit测试Spring Service和DAO(带有内存数据库)
junit 测试 dao 这篇文章描述了如何为Spring Web Application的Services和DAO实现JUnit测试. 它建立在Spring MVC-Service-DAO-Pers ...
- 让人上瘾的新一代开发神器,彻底告别Controller、Service、Dao等方法
大家好,我是宝哥! 目录 初衷 特性 传统开发步骤 演示说明 初衷 用尽可能简单的方式,完成尽可能多的需求.通过约定的方式实现统一的标准.告别加班,拒绝重复劳动,远离搬砖. 特性 如下: 用于快速开发 ...
最新文章
- 如何用xmanager远程连接centos6.0的桌面
- R语言构建xgboost模型:模型的保存(xgb.save)和加载(xgb.load)、或者保存为R二进制文件(xgb.save.raw R binary vector)
- linux服务器LVS/DR模式+nfs
- 【计算理论】计算复杂性 ( 计算理论内容概览 | 计算问题的有效性 | 时间复杂性度量 | 输入表示 | 时间复杂度 )
- 【强化学习】深度强化学习入门介绍
- 设计一个可扩展的用户登录系统
- 【clickhouse】 clickhouse配置查询记录query_log
- LeetCode 951. Flip Equivalent Binary Trees
- 哈工大2019计算机专业录取分数线,哈尔滨工业大学2019年高考分省分专业录取分数线...
- AI 图像识别项目从入门到上线
- pano2vr输出的HTML手机可以看吗,Pano2VR怎么导出手机可看, Pano2VR导出手机查看教程...
- Java单身狗,java 的23种设计模式 之单身狗和隔壁老王的故事
- SwiftUI vs 故事板
- 图片怎样调整分辨率?如何在线修改分辨率?
- 太火爆了!这一款小游戏火到把服务器搞瘫痪,合成大西瓜
- java中to date_Java Date toInstant()用法及代码示例
- Shiro 第十七章 OAuth2集成
- GNOME 技术综述(转)
- Oracle数据库Timestamp数据差值计算Sql语句
- 程序自我保护 c语言编程,C语言时尚编程百例
热门文章
- 手机版的python-python手机版
- python画树叶-用python画树叶
- python3.7.2使用-centos7系统下python2与python3共存
- 如何系统的自学python 知乎-作为小白,如何系统的自学PythonWeb开发?
- python turtle画彩虹-python绘制彩虹图
- 学好python工资一般多少钱-Python工资多少?就业发展前景怎么样?
- python和c++哪个好学-C++和Python哪一个更好?
- python使用什么注释语句和运算-怎么使用python注释语句
- python流程控制语句-Python中流程控制语句的详细介绍
- python基本使用-Python time库基本使用方法分析