1,dao和service对应
一般情况下,Hibernate DAO只操作一个POJO对象,因此一个DAO对应一个POJO对象。 Service层是为了处理包含多个POJO对象(即对多个表的数据操作)时,进行事务管理(声明式事务管理)。Service层(其接口的实现类)被注入多个DAO对象,以完成其数据操作。
2, Service之有无
这一点我的看法未必正确,我的脑海现在有两种构建业务层的模式:
模式1是Service + DAO,即DAO中只做CRUD及类似的简单操作(称之为功能点,不包含业务逻辑),Service中通过调用一个或多个DAO中的功能点来组合成为业务逻辑.Service的数量应该由功能模块来决定。
在这种模型中业务逻辑是放在Service中的,事务的边界也应该在Service中控制. 当然,直接在Service中控制事务会引入非业务逻辑的代码,幸好Spring的AOP可以解决这个问题,这也是引入Spring的原因之一.
如果说到缺点,就在于对某些对象的操作就是简单的CRUD,Service层显得累赘.
2:
从字面的意思上来看,service是业务层,dao是数据访问层。
记得刚学编程的时候,都是在service里直接调用dao,service里面就new一个dao类对象,调用,其他有意义的事没做,因为也不知道应该在里面写些什么有意义的代码,也不明白有这个有什么用,甚至还觉得不要serivce层不更好,省点功夫,反正它不也就是copy了一次dao层然后改个名字而已么……
我们都知道,标准主流现在的编程方式都是采用MVC综合设计模式,MVC本身不属于设计模式的一种,它描述的是一种结构,最终目的达到解耦,解耦说的意思是你更改某一层代码,不会影响我其他层代码,如果你会像spring这样的框架,你会了解面向接口编程,表示层调用控制层,控制层调用业务层,业务层调用数据访问层。初期也许都是new对象去调用下一层,比如你在业务层new一个DAO类的对象,调用DAO类方法访问数据库,这样写是不对的,因为在业务层中是不应该含有具体对象,最多只能有引用,如果有具体对象存在,就耦合了。当那个对象不存在,我还要修改业务的代码,这不符合逻辑。好比主板上内存坏了,我换内存,没必要连主板一起换。我不用知道内存是哪家生产,不用知道多大容量,只要是内存都可以插上这个接口使用。这就是MVC的意义。
接下来说如果现在感觉不到service的存在意义,其实因为现在做东西分层次不是那么严格,在一个你们做东西业务本身也少,举个最简单的例子,你做一个分页的功能,数据1000条,你20条在一个页,你可以把这个功能写成工具类封装起来,然后在业务层里调用这个封装的方法,这才是业务里真正干得事,只要没访问数据库的,都要在业务里写。
比说你现在用的是SSH框架,做一个用户模块:
1、假设现在你做这个功能会用到user表和权限表,那么你前台的页面访问action,action再去调用用户模块service,用户模块service判断你是操作user表还是权限表,如果你操作的是user表则service的实现类就去调用userDAO。如果是操作的是权限表则调用权限的DAO
2、也就是说DAO一定是和数据库的每张表一一对应,而service则不是。明白的没?其实你一个项目一个service和一个DAO其实也一样可以操作数据库,只不过那要是表非常多,出问题了,那找起来多麻烦,而且太乱了
3、好处就是你的整个项目非常系统化,和数据库的表能一致,而且功能模块化,这样以后维护或者改错比较容易,性能也高一些
一般情况下,Hibernate DAO只操作一个POJO对象,因此一个DAO对应一个POJO对象。 Service层是为了处理包含多个POJO对象(即对多个表的数据操作)时,进行事务管理(声明式事务管理)。Service层(其接口的实现类)被注入多个DAO对象,以完成其数据操作。
2, Service之有无
这一点我的看法未必正确,我的脑海现在有两种构建业务层的模式:
模式1是Service + DAO,即DAO中只做CRUD及类似的简单操作(称之为功能点,不包含业务逻辑),Service中通过调用一个或多个DAO中的功能点来组合成为业务逻辑.Service的数量应该由功能模块来决定。
在这种模型中业务逻辑是放在Service中的,事务的边界也应该在Service中控制. 当然,直接在Service中控制事务会引入非业务逻辑的代码,幸好Spring的AOP可以解决这个问题,这也是引入Spring的原因之一.
如果说到缺点,就在于对某些对象的操作就是简单的CRUD,Service层显得累赘.
2:
从字面的意思上来看,service是业务层,dao是数据访问层。
记得刚学编程的时候,都是在service里直接调用dao,service里面就new一个dao类对象,调用,其他有意义的事没做,因为也不知道应该在里面写些什么有意义的代码,也不明白有这个有什么用,甚至还觉得不要serivce层不更好,省点功夫,反正它不也就是copy了一次dao层然后改个名字而已么……
我们都知道,标准主流现在的编程方式都是采用MVC综合设计模式,MVC本身不属于设计模式的一种,它描述的是一种结构,最终目的达到解耦,解耦说的意思是你更改某一层代码,不会影响我其他层代码,如果你会像spring这样的框架,你会了解面向接口编程,表示层调用控制层,控制层调用业务层,业务层调用数据访问层。初期也许都是new对象去调用下一层,比如你在业务层new一个DAO类的对象,调用DAO类方法访问数据库,这样写是不对的,因为在业务层中是不应该含有具体对象,最多只能有引用,如果有具体对象存在,就耦合了。当那个对象不存在,我还要修改业务的代码,这不符合逻辑。好比主板上内存坏了,我换内存,没必要连主板一起换。我不用知道内存是哪家生产,不用知道多大容量,只要是内存都可以插上这个接口使用。这就是MVC的意义。
接下来说如果现在感觉不到service的存在意义,其实因为现在做东西分层次不是那么严格,在一个你们做东西业务本身也少,举个最简单的例子,你做一个分页的功能,数据1000条,你20条在一个页,你可以把这个功能写成工具类封装起来,然后在业务层里调用这个封装的方法,这才是业务里真正干得事,只要没访问数据库的,都要在业务里写。
比说你现在用的是SSH框架,做一个用户模块:
1、假设现在你做这个功能会用到user表和权限表,那么你前台的页面访问action,action再去调用用户模块service,用户模块service判断你是操作user表还是权限表,如果你操作的是user表则service的实现类就去调用userDAO。如果是操作的是权限表则调用权限的DAO
2、也就是说DAO一定是和数据库的每张表一一对应,而service则不是。明白的没?其实你一个项目一个service和一个DAO其实也一样可以操作数据库,只不过那要是表非常多,出问题了,那找起来多麻烦,而且太乱了
3、好处就是你的整个项目非常系统化,和数据库的表能一致,而且功能模块化,这样以后维护或者改错比较容易,性能也高一些
发表评论
-
linux将80端口映射到8080
2017-11-28 17:06 523iptables -t nat -A PREROUTING ... -
eclipse黑科技
2017-10-12 10:46 514eclipse的黑科技 -
linux启动jetty系统环境变量不生效
2017-09-11 20:40 911netstat -nalp | grep 8080 kill ... -
前端调后端跨域问题
2017-08-14 23:59 5001:使用Filter package xx ... -
IFRAME跨域单点登录问题
2017-07-21 15:13 1446iframe里面src指向了一个跨域的url,www.a.co ... -
JS BASE64
2017-07-21 15:02 445var keyStr = "ABCDEFGHIJK ... -
springboot 打war包的问题
2017-07-07 19:04 4531.首先 修改pom.xml下的打包方式 <packa ... -
flex布局
2017-06-27 20:24 423要实现如下简单效果 使用传统布局: .sa-fo ... -
PosgreSQL
2017-06-12 13:31 616sudo-s(root进入文件夹) export PGD ... -
spring boot idea 启动异常
2017-06-05 15:27 1006org.springframework.context.App ... -
JS小数相加问题
2017-05-11 11:20 2660JS: 0.1+0.2会等于0.3000000 ... -
JS与,或运算DEMO
2017-04-13 16:36 451var a = 0x1; var b = 0x2; v ... -
JS位预算符
2017-04-04 13:51 583详见博客http://www.w3school.com.cn/ ... -
未安装oracle数据库,配置plsqldeveloper
2017-04-01 13:36 510本地没装oracle数据库,但是又想用plsqldevelop ... -
maven命令行创建JMH工程的方式
2017-03-30 13:46 659新建工程 mvn archetype:generate -Di ... -
《将博客搬至CSDN》
2017-03-28 16:29 10本人同意搬家至CSDN, -
坐标轴范围及刻度的自适应算法
2017-03-24 10:14 1760本文参考博客:http://blog.csdn.net/h ... -
坐标轴范围及刻度的自适应算法
2017-03-24 10:13 0本文参考博客:http://blog.csdn.net/he ... -
apache commons pool2: ObjectPool类族实现分析
2017-03-17 09:56 701http://shmilyaw-hotmail-com.i ... -
cron表达式实现java调度任务
2017-03-17 09:34 529CronExpression cronExpression ...
相关推荐
本文主要探讨Spring如何贯穿整个中间层,将Web层、Service层、DAO层以及PO(Plain Old Java Object)无缝整合起来。 #### 二、Spring框架的关键作用 1. **无缝整合**:Spring框架的一个显著特点是能够将不同的技术...
具体来说,Spring可以将Web层、Service层、DAO层以及PO(Plain Old Java Object)对象无缝整合在一起,形成一个完整而高效的应用程序架构。 - **Web层**:处理与用户交互相关的部分,如HTTP请求的接收、处理以及...
作用:Service层主要负责业务模块的逻辑应用设计。 先设计接口然后再设计实类,然后再在Spring的配置文件中配置其实现的关联。(业务逻辑层的实现具体要调用到自己已经定义好的Dao的接口上)这样就可以在应用中调用...
作用:Service层主要负责业务模块的逻辑应用设计。 先设计接口然后再设计实类,然后再在Spring的配置文件中配置其实现的关联。(业务逻辑层的实现具体要调用到自己已经定义好的Dao的接口上)这样就可以在应用中调用...
安装composer require madeweb/service-layer 生成服务基类和定制服务类 php artisan make:service ServiceName 使用定制模型生成服务基类和定制服务类 php artisan make:service ServiceName --model=App \\ Models...
Service层是模型-视图-控制器(MVC)架构或其他分层设计中的关键环节,它将数据访问层(如DAO)和表现层(如Controller)分离开来,使得代码结构更加清晰,易于维护和扩展。 在Java EE或Spring框架中,Service层...
在IT行业中,SQL数据库和WcfService是两个关键的技术领域,它们在开发高效、可靠的分布式应用程序时发挥着重要作用。本文将深入探讨这两个概念,并结合三层结构数据查询示例,帮助你理解它们如何协同工作。 首先,...
首先,让我们理解Service层的作用。Service层主要负责业务逻辑的处理,它是介于Controller和Model之间的中间层。Controller不再直接处理复杂的业务逻辑,而是调用Service层提供的接口,这样可以使得Controller更简洁...
3.1 Service层:在Android系统中,Service是一种长期运行的组件,负责执行后台任务。在HAL层示例中,服务可能是一个管理硬件资源的服务,如电源管理服务、传感器服务等。 3.2 IPC通信:AP通过Android的 Binder 机制...
在Laravel中,服务层的主要作用是: 1. **业务逻辑封装**:服务层负责处理复杂的业务逻辑,如数据验证、业务规则应用、跨模型操作等,避免在控制器中混杂过多的业务代码。 2. **解耦**:通过将业务逻辑抽取到独立...
然后,"业务层"通常指的是服务层(Service Layer),这是应用程序的核心部分,实现了具体的业务逻辑。在这个层面上,建模工具类可能涉及到服务的注册、依赖注入、并发控制等,以支持更高效、更灵活的服务构建。 在...
【Service学习(三)】 ...通过深入研究ServiceDemo,我们能更好地理解Service层在软件开发中的作用,从而提升我们的编程能力和项目构建能力。在实际工作中,要灵活运用这些知识,以适应不断变化的业务需求。
### 为什么我们需要Service Mesh ...随着技术的不断发展和完善,Service Mesh将在更多的应用场景中发挥关键作用。对于正在采用或计划采用微服务架构的企业来说,了解并应用Service Mesh技术变得越来越重要。
Service的主要作用是处理业务逻辑,不依赖于任何表现技术,不操作任务用于表现的对象。 Dao是指数据访问对象,负责对数据库的访问和操作。例如,在上面的示例代码中,update方法就可以放到Dao中。Dao的主要作用是...
它接收来自用户的请求,对请求进行初步处理,并调用Service层的方法来完成业务逻辑。Controller通常使用Spring MVC框架中的Controller注解,如`@RequestMapping`来处理HTTP请求,并通过`@Autowired`注解注入Service...
`@Service`注解通常用于表示业务层的服务类。在这里,它们分别注入了不同类型的`OAXmlDealHandle`实现,通过`@Resource`注解来指定类型,分别是`OAXmlDealHandleOne`和`OAXmlDealHandleTwo`。这样,每个Service类...
在深入探讨蚂蚁金服ServiceMesh的落地实践与挑战之前,首先要理解ServiceMesh技术的核心概念及其在微服务架构中的作用。 ServiceMesh是一种用于处理服务间通信的架构模式,它将网络通信、安全、监控、故障恢复等...
物理层是指实际的网络设备和介质,数据链路层是指Node之间的通信,网络层是指Pod之间的通信,传输层是指Service之间的通信。 1.2.2、服务间的通信 Service Mesh提供了一种灵活、可靠、可扩展的解决方案来管理服务...
在AngularJS中,服务(Service)和控制器(Controller)是两个关键的概念,它们在构建复杂的前端应用程序时起着至关重要的作用。本示例"Angular Service Controller分层示例"旨在展示如何有效地使用这两个组件来实现...
3. Service文件:Service层是业务逻辑的核心,它封装了对数据持久层的操作。生成Service文件时,代码生成器会创建Service接口和实现类,定义业务方法,并可能包含事务控制、异常处理等通用逻辑。这样,开发者可以...