文章来源于网络,仅用于学习:
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 + BO, 而BO = DAO + 业务方法, 在原先DAO的基础上添加业务方法,形成BO对象。需要注意的是BO中的业务方法往往是针对一个实体对象的,如果需要跨越多个实体对象,则方法应该放在 Service中。
举例来说,一个简单的银行帐户管理系统,创建帐户这个BO对象,里面可以有修改密码,取钱等业务方法(不难看出,这些方法都只对单个帐户对象进行操作)。现在需要添加一个转账方法,就应该放在Service中。
这里Service和BO的关系是什么样的呢?再举一例:以国家行政机关为例:粮食局负责收粮,卖种子等,建设部负责审批土地买卖,建设公路等,这都是行政部分份内的事儿。突然某地发了水灾,救灾时需要粮食局开仓放粮,建设部修建临时房屋,如何协调两个部门?就需要成立专门的救灾委员会,由救灾委员会出面对两个部分的资源进行调拨。这里两个部分就是BO,而救灾委员会就是Service。不知我的意思是否表达准确了,呵呵。 模式1的在划分Service和DAO时界限清晰,但会带来一些无必要的代码。
模式2的划分相对复杂,然而可以提高编码效率。
当然小规模的应用中,没有Service,完全是DAO或BO也是可以接受的。
3,Service和DAO的接口之有无
接口是一种契约,它可以有多种实现。所以接口之有无取决于具体实现是否需要多样化。如果铁定一种DAO或一种Service只有一种实现,那么抽象出接口的意义不大。然而一些大型应用或许需要DAO和Service的多种实现(比如上面例子中的帐户DAO,可能需要一种Hibernate实现、一种CMP 实现和一种JDO实现),为了向上一层隐藏具体实现类,需要采用接口。
隐藏具体实现类的创建过程,这有两种方法:一是实用工厂方法,代价是代码量大(每个DAO和Service一个工厂)。二是使用Spring的IoC,实现依赖注入,不需要写额外的代码,这也是引入Spring的理由之二。
DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类,显得结构非常清晰,DAO层的数据源配置,以及有关数据库连接的参数都在Spring的配置文件中进行配置。
Service层:Service层主要负责业务模块的逻辑应用设计。同样是首先设计接口,再设计其实现的类,接着再Spring的配置文件中配置其实现的关联。这样我们就可以在应用中调用Service接口来进行业务处理。Service层的业务实现,具体要调用到已定义的DAO层的接口,封装Service层的业务逻辑有利于通用的业务逻辑的独立性和重复利用性,程序显得非常简洁。
Controller层:Controller层负责具体的业务模块流程的控制,在此层里面要调用Serice层的接口来控制业务流程,控制的配置也同样是在Spring的配置文件里面进行,针对具体的业务流程,会有不同的控制器,我们具体的设计过程中可以将流程进行抽象归纳,设计出可以重复利用的子单元流程模块,这样不仅使程序结构变得清晰,也大大减少了代码量。
View层 此层与控制层结合比较紧密,需要二者结合起来协同工发。View层主要负责前台jsp页面的表示,
DAO层,Service层这两个层次都可以单独开发,互相的耦合度很低,完全可以独立进行,这样的一种模式在开发大项目的过程中尤其有优势,Controller,View层因为耦合度比较高,因而要结合在一起开发,但是也可以看作一个整体独立于前两个层进行开发。这样,在层与层之前我们只需要知道接口的定义,调用接口即可完成所需要的逻辑单元应用,一切显得非常清晰简单。
DAO设计的总体规划需要和设计的表,和实现类之间一一对应。
DAO层所定义的接口里的方法都大同小异,这是由我们在DAO层对数据库访问的操作来决定的,对数据库的操作,我们基本要用到的就是新增,更新,删除,查询等方法。因而DAO层里面基本上都应该要涵盖这些方法对应的操作。除此之外,可以定义一些自定义的特殊的对数据库访问的方法。
Service逻辑层设计
Service层是建立在DAO层之上的,建立了DAO层后才可以建立Service层,而Service层又是在Controller层之下的,因而Service层应该既调用DAO层的接口,又要提供接口给Controller层的类来进行调用,它刚好处于一个中间层的位置。每个模型都有一个Service接口,每个接口分别封装各自的业务处理方法。
在DAO层定义的一些方法,在Service层并没有使用,那为什么还要在DAO层进行定义呢?这是由我们定义的需求逻辑所决定的。DAO层的操作 经过抽象后基本上都是通用的,因而我们在定义DAO层的时候可以将相关的方法定义完毕,这样的好处是在对Service进行扩展的时候不需要再对DAO层进行修改,提高了程序的可扩展性。
分享到:
相关推荐
这层通常由Java POJO(Plain Old Java Object)或服务接口(如Spring的`@Service`)实现。配置这一层,我们需要定义服务接口及其实现,确保它们能被表现层正确调用。例如,使用Spring框架时,可以利用依赖注入...
2. 系统架构设计:采用分层架构,包括表示层(Web层)、业务逻辑层(Service层)和数据持久层(DAO层),并为每一层创建对应的package。 3. 添加Spring支持:配置Spring的核心文件`applicationContext.xml`,定义...
这个框架的详细阐述主要涵盖了四个层面:持久层(DAO层)、业务层(Service层)、表现层(Controller层)和视图层(View层),以及它们之间的相互联系和整合方式。 1. **持久层(DAO层)**: DAO层是数据访问对象...
DAO层负责与数据库交互,Service层处理业务逻辑,ACTION层处理用户请求并调用Service。 9. **配置文件修改** - **Spring配置**:配置SessionFactory,指定hibernate.cfg.xml的位置;配置通用DAO(GeneralDao),并...
- **Service** 层位于DAO层之上,主要负责业务逻辑的处理。 - **设计模式**: - 定义业务接口。 - 实现该接口的具体类。 - 在Spring配置文件中配置接口实现类的依赖关系。 - **优点**: - 提高了业务逻辑的独立...
在Spring配置文件中,我们定义了DAO层和Service层的实现类,通过DI管理这些类的实例,同时Spring还提供了事务管理功能,确保数据操作的一致性。Service层接口和实现类的创建,以及DAO层的定义都在Spring配置文件中...
- 在配置文件中定义bean,如DAO层、Service层等。 4. **实现Hibernate持久层**: - 添加Hibernate相关的jar包。 - 配置Hibernate,包括`hibernate.cfg.xml`等。 - 使用Hibernate进行数据库操作,如CRUD操作。 ...
- **分层架构**:系统采用经典的三层架构,包括表示层(Web层,使用Struts2)、业务逻辑层(Service层,使用Spring)和数据访问层(DAO层,使用Hibernate)。每个层都有明确的职责,使得代码结构清晰,易于维护。 ...
购物商城项目搭建。 第一步:创建项目 第二步:拷jar包(mybatis、mysql驱动、jstl) 放到WEB-INF/lib/下面 第三步:分层(创建包) 公司的域名反写 + ... 第九步:测试(让控制器、业务层、数据访问层三层连接起来).
- **分层架构**:采用MVC(Model-View-Controller)模式,将系统划分为表示层、业务逻辑层和数据持久层,分别对应Web层、Service层和DAO层,实现高内聚低耦合的设计原则。 ##### 3. Spring框架集成 - **添加Spring...
- **6.2 Service层实现类**:实现Service接口,通常在实现类中会调用DAO层接口。 - **6.3 依赖注入**:通过Spring的依赖注入机制注入DAO层bean。 ##### 7. 实现表示层(Action类和JSP文件) - **7.1 配置web.xml**...
在SSH框架中,业务层Service通过调用DAO接口,间接地与数据库进行通信。 SSH框架的集成使得各层之间松散耦合,提高了代码的可读性和可维护性。在配置好`applicationContext.xml`后,Struts的Action可以直接调用...
开发者拿到这个SSH框架模板后,可以直接在action层编写业务逻辑,调用service层的方法,service层再通过dao层与数据库进行交互。实体类(pojo)根据实际数据库表结构进行调整,而配置文件如struts.xml、spring.xml...
Service层封装了DAO(Data Access Object),提供业务接口给Action调用,同时Spring还支持声明式事务管理,确保了业务操作的一致性。此外,Spring还包含了AOP(面向切面编程)机制,用于事务控制和其他横切关注点,...
7. **DAO和Service**:DAO(Data Access Object)层负责与数据库的交互,而Service层是业务逻辑处理层,它调用DAO层的方法完成业务操作。 8. **ACTION配置**:在Struts2中,ACTION类是控制器,负责接收请求,调用...
- 在Spring配置文件中定义Service层Bean,并注入DAO层Bean。 7. **WEB层开发** - 在`web.xml`中配置Struts2过滤器和Spring监听器。 - 配置Struts2与Spring的整合文件`struts.properties`。 - 创建所需的JSP页面...
三层架构通常指的是表示层(或称展示层)、业务逻辑层和服务层(或数据访问层)。业务逻辑层位于表示层和服务层之间,它的主要职责是处理业务规则和复杂的业务流程。 #### 表示层(View / Controller) 表示层负责...