`
xixinfei
  • 浏览: 410866 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

j2ee分层设计

 
阅读更多
一,Service->DAO,只能在Service中注入DAO。

二,DAO只能操作但表数据,跨表操作放在Service中,Service尽量复用DAO,只有一张表产生的业务放入DAO中。

三,事务操作,放在一个DAO中。

四,如果有更大Service的之间的复杂调用,考虑在service上再加Facade层(Components组件)。

五,多考虑这部分代码放在哪里,多里利用上下分层,增加代码可读性,提高代码复用率。

服务层处理业务逻辑,DAO封装Entity对象,Action作为Controller处理分发。
业务逻辑是最容易变化的地方,当业务改变时,只增加修改相应的代码即可。真正享受分层带来的益处。

文章出处:http://www.diybl.com/course/3_program/java/javaxl/2008620/126932.html
 
 J2EE分层设计是Java企业应用的最基本的设计思想。

  从最常规的分层结构来说,系统层次从上到下依次为:

  表现层:主要是客户端的展示。

  服务层:直接为客户端提供的服务或功能。也是系统所能对外提供的功能。

  领域层:系统内的领域活动。

  DAO层:数据访问对象,通过领域实体对象来操作数据库。

  其中有些指导原则:

  1、上层总是依赖其下层,依赖关系不跨层。

  2、表现成除外,同一层之间方法不允许相互调用。这是实际开发中一些开发者容易范的错误!如果真是同一层之间存在方法调用,需要注意,这些调用都是一些上层不可见方法,比如一些工具方法等。

  3、一切从服务层出发,从系统需要提供的功能进行分析,确定Service接口中的方法。而不是从数据库的表出发,创建DAO,再创Domain,然后Service,这实际上是对系统分层的误解。

  4、系统最核心的设计就是将系统中的实体划分为领域模型。在此基础上设计数据的DAO层,并将这些活动暴露给服务层,服务层的实现依赖于领域活动。

  5、每个接口的职责范围明确有界。

  在我所做的系统中,常常看到一些糟糕的编码:系统设计从表开始,一个表对应一个DAO,一个DAO对应一个domain,一个Domain对应一个Service,实际上Service的接口和DAO的接口基本上完全一样!导致Service的接口方法超多!到了表现层,前台程序员在写Action的时候,Action中反复的调用Service方法,代码不堪入目。

  正确的设计应该是,一个领域活动会聚合对应一个或一组DAO,来完成一个领域活动。而一个服务可能包含两个领域活动,比如一个转账的业务,对应两个领域活动。两个帐户的金额分别发生变化,需要操作一组领域活动,而每个活动需要操作很多表(调用多个DAO)。 事务的控制我们可以放到Service层。

  目前,越来越多的架构师喜欢领域模型驱动设计,针对系统的领域模型建模,然后上层直接是Service,Service下面就是领域活动层Activity,从而去掉了DAO层,这样做的优点是系统设计思路更清晰,目标更明确。可以避免上面所说的一个表对应一个DAO、Service的情况。

  但缺点是当领域活动发生变化的时候,会引起领域活动层代码的变化。并且,当要更换持久化框架或者技术时候,领域活动要重新实现。

  但综合考虑起来,这样带来的优点也很多,而实际上更换数据库和持久化框架的情况很少,因此这样的设计也是有其合理性一面的。这样做实际上是将原来的DAO和Domain层合并为一个Activity.但上层的设计思路还是一致的。

  其实Service层的设计也很讲究,其中就是要控制Service的数量,从Service层往下,接口数量逐层增加。通常将一个模块的服务都集中到一个Service中来处理。

  每层中的每个接口都应该关注的是自己的那一块,而不是吃着碗里看着锅里,牛槽伸出个狗舌头,最典型的例子就是一个DAO中胡乱操作别的表。这种凌乱的实现只会置项目经理与死地。也会为软件的维护带来很大代价。

  笔者曾遇到这样的团队,缺乏对整个项目的整体设计,一个表一个DAO,对应一个Service,系统也不大,三四十张表,但是性能相当地下,经常down机。

  最终发现,失败不是开源框架和数据库以及应用服务器和硬件配置的错,根源在于拙劣的设计导致。

  希望以后大家在做项目的时候能注意点
分享到:
评论
1 楼 wangyuheng 2014-05-08  
一直不明白 多表操作的时候 应该怎么办 对应哪个domain 和dao

相关推荐

    J2EE分层设计

    而不是从数据库的表出发,创建DAO,再创Domain,然后Service,这实际上是对系统分层的误解。 4、系统最核心的设计就是将系统中的实体划分为领域模型。在此基础上设计数据的DAO层,并将这些活动暴露给服务层,服务层...

    论文研究-基于J2EE的网上选课系统设计.pdf

    J2EE是一种利用Java2平台来简化多级企业解决方案的开发、部署和管理...对实际应用的J2EE分层结构进行了详细分析,给出一种J2EE架构下的多层应用模式,并通过高校网上选课系统的设计详细介绍了该模式下的具体开发方案。

    《j2ee电子商务平台系统》毕业设计

    而这个下载只是项目代码。 项目所用到的技术: ...(2)Spring 框架对网站分层 (Spring MVC) 表现层( UI )、业务逻辑层、数据访问层( DAL ) (3) MyBatis ( 前身是 ibatis ) ,是数据持久层 (ORM) 框架

    J2EE学习精要

    培训机构内部讲义,讲述J2EE分层,单例,组件,平台,容器,分层设计,框架,UML设计,模块化与JNDI。

    论文研究-基于J2EE的结核病防治系统的设计 .pdf

    基于J2EE的结核病防治系统的设计,程义超,罗先春,本文介绍了结核病防治系统的设计方案,同时还详细介绍了该系统的模型、流程及层次结构。采用J2EE中的Struts技术结合MVC架构分层开发��

    基于J2EE的Web应用的MVC架构实现_尹汉东

    设计模式在当前的工程应用中越来越广泛 ,MVC 是软件开发中 的一种重 要的设计 模式 , J2EE 则是开 发高端企 业级应用的成熟技术体系。 在软件规模日益庞大的今天 , 这两种技术的结合为大型软件应用的开发提供了成功...

    J2EE 企业应用实战

    书中所介绍的轻量级J2EE应用,是目前最流行、最规范的J2EE架构,分层极为清晰,各层之间以松耦合的方法组织在一起。书的最后配备了两个实例,均采用了贫血模式的架构设计,以便于读者更快地进入J2EE应用开发。而第8...

    论文研究-基于J2EE的无线增值业务平台的设计与实现 .pdf

    基于J2EE的无线增值业务平台的设计与实现,饶竹伟,宋美娜,本文结合J2EE技术,设计了一套综合的无线增值业务平台。平台的设计采用分层结构,组件化设计,具有良好的扩展性,高性能的抗压能��

    基于J2EE的工作流管理系统设计.pdf

    :分析了工作流技术,提出了一套基于J2EE 框架平台的工作流管理系统的解决方案。在此基础上设计了工作流管理 系统的参考模型,提出了流程定义语言规范。根据分层思想和分而治之的策略,按上述模型规范将办公系统的...

    基于Struts,Hibernate和Spring的J2EE架构研究

    介绍Struts,Hibernate和Spring三个开源框架及它们对MVC设计模式的实现,阐述如何更好地将三者结合起来构建一个健壮、高效、易于扩展的J2EE分层架构,并给出该架构的结构图,分析它的优缺点,并且通过网上购物系统给出了...

    J2EE 企业应用实战:Struts Spring Hibernate 整合开发 part1

    书中所介绍的轻量级J2EE 应用,是目前最流行、最规范的J2EE 架构,分层极为清晰,各层之间以松精合的方法组织在一起。书的最后配备了两个实例,均采用了贫血模式的架构设计,以便于读者更快地进入J2EE 应用开发。 还...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    本系统设计时,比较主流的B/S设计有基于JSP、ASP、PHP、CGI及J2EE等模式。相比较而言PHP的功能相对简单,不适合做大程序;而CGI效率相对较低,所以也不考虑。由于J2EE的开源的框架中提供了MVC模式实现框架Struts、...

    J2EE 企业应用实战:Struts Spring Hibernate 整合开发 part2

    书中所介绍的轻量级J2EE 应用,是目前最流行、最规范的J2EE 架构,分层极为清晰,各层之间以松精合的方法组织在一起。书的最后配备了两个实例,均采用了贫血模式的架构设计,以便于读者更快地进入J2EE 应用开发。 还...

    基于J2EE核心模式的组合Web框架研究

    框架采用分层体系架构,集成了开源的J2EE Web框架和持久层框架,并在表示层和业务层综合应用多种J2EE核心模式,实现了层次之间和业务层内部的松散耦合,提高了系统的可复用性和开放性.研究了N层计算模式、AJAX和正则...

    J2EE 企业应用实战:Struts+Spring+Hibernate 整合开发

    书中所介绍的轻量级J2EE应用,是目前最流行、最规范的J2EE架构,分层极为清晰,各层之间以松精合的方法组织在一起。 书的最后配备了两个实例,均采用了贫血模式的架构设计,以便于读者更快地进入J2EE应用开发。而第8...

    轻量级J2EE企业应用实战part 2

    书中所介绍的轻量级J2EE 应用,是目前最流行、最规范的J2EE 架构,分层极为清晰,各层之间以松精合的方法组织在一起。 书的最后配备了两个实例,均采用了贫血模式的架构设计,以便于读者更快地进入J2EE 应用开发。...

    轻量级J2EE企业应用实战part 1

    书中所介绍的轻量级J2EE 应用,是目前最流行、最规范的J2EE 架构,分层极为清晰,各层之间以松精合的方法组织在一起。 书的最后配备了两个实例,均采用了贫血模式的架构设计,以便于读者更快地进入J2EE 应用开发。...

    haivDb4J2ee1.3

     4、代码分层问题:本工具将根据您的模板配置,自动实现MVC分层。  5、日期型、数值型变量与Jsp页面交互时需手动转换类型的问题:自动在Form里生成了对应的String变量,用来和Jsp交互。  6、代码可读性问题:代码...

    轻量级J2EE 企业应用实战 Struts+Spring+Hibernate整合开发

    最流行、最规范的J2EE 架构,分层极为清晰,各层之间以松精合的方法组织在一起。书的最后配备了两 个实例,均采用了贫血模式的架构设计,以便于读者更快地进入J2EE 应用开发。而第8 章所介绍的其他 架构模式则可作为...

Global site tag (gtag.js) - Google Analytics