`

对J2EE应用系统分层设计的思考

    博客分类:
  • J2ee
阅读更多

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机。

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

    希望以后大家在做项目的时候能注意点。

 

    原文出处:http://lavasoft.blog.51cto.com/62575/83974

 

分享到:
评论

相关推荐

    《J2EE体系结构及程序设计》课程评价分析

    《J2EE体系结构及程序设计》是一门针对计算机科学与技术专业学生的选修课程,主要目的是培养学生在Java EE平台上进行Web程序设计和企业应用开发的能力。课程在大学三年级第一学期开设,考虑到学生已具备一定的Java...

    ebay的j2ee构架

    标题和描述均提到了“ebay的j2ee构架”,...综上所述,eBay的J2EE架构转型是一个典型的企业级应用从传统架构向现代技术栈迁移的成功案例,它不仅展示了技术选型的重要性,也强调了设计模式在构建复杂系统中的关键作用。

    J2EE蓝图摘要

    #### 九、EnterpriseBeans在J2EE应用中的作用 - **EJB概念**:Enterprise JavaBeans是用于实现企业级应用的业务逻辑的服务端组件。 - **类型**:主要包括会话Bean、实体Bean和消息驱动Bean。 - **使用场景**:适用于...

    CSLA.Net架构在分布式系统开发中的应用.pdf

    它借鉴了J2EE架构的设计思路,为.NET开发人员提供了一套企业级软件系统开发的框架和基本思路。CSLA框架把应用程序的逻辑N层大致划分为五个层次:表示层、用户界面层、业务逻辑层、数据访问层和数据存储层。这样的...

    基于EXT技术的网上订单管理系统

    - **界面设计**:设计权限管理界面,允许管理员对不同角色进行权限分配。 - **代码设计**:通过Struts和Hibernate实现用户权限的动态配置和管理。 ##### 5. 公告管理 - **功能**:实现公告的发布和管理。 - **组成...

    strust教程有美河制造

    书中不仅包含了具体的代码示例,还贯穿了大量的开发思想与技术要点讲解,旨在让读者不仅学会如何编写代码,更重要的是学会如何思考问题,如何设计系统架构,以及如何优化代码性能。 ### 实际开发流程 作者按照实际...

    Java_EE企业应用实战SSH(第三版)-part3

    曾任LITEON公司的J2EE技术主管,负责该公司的企业信息平台的架构设计。曾任广州电信、广东龙泉科技等公司的技术培训导师。2007年3月26日的《电脑报》专访人物。现任新东方广州中心软件教学总监,并曾任广东技术师范...

    Java_EE企业应用实战SSH(第3版)-part2

    曾任LITEON公司的J2EE技术主管,负责该公司的企业信息平台的架构设计。曾任广州电信、广东龙泉科技等公司的技术培训导师。2007年3月26日的《电脑报》专访人物。现任新东方广州中心软件教学总监,并曾任广东技术师范...

    Java_EE企业应用实战SSH(第3版)-part1

    曾任LITEON公司的J2EE技术主管,负责该公司的企业信息平台的架构设计。曾任广州电信、广东龙泉科技等公司的技术培训导师。2007年3月26日的《电脑报》专访人物。现任新东方广州中心软件教学总监,并曾任广东技术师范...

    JAVA高级技术

    4. J2EE与设计模式:分析设计模式在J2EE架构下的具体应用,以及如何优化企业级应用的性能和可扩展性。 5. 轻量级企业架构:引入Struts、Spring、Hibernate等框架,展示如何构建高性能、可维护的企业级应用。 六、...

    通向架构师的道路

    - **架构基础**:书中首先介绍了J2EE工程的通用架构,包括了分层结构和组件交互原则,为读者建立起对Web应用架构的初步认识。 #### Apache与Tomcat整合 - **Web服务器与应用服务器**:介绍了Apache HTTP服务器与...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

    第1章 Java应用分层架构及软件模型  1.1 应用程序的分层体系结构  1.1.1 区分物理层和逻辑层  1.1.2 软件层的特征  1.1.3 软件分层的优点  1.1.4 软件分层的缺点  1.1.5 Java应用的持久化层  1.2 软件的模型 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

    第1章 Java应用分层架构及软件模型  1.1 应用程序的分层体系结构  1.1.1 区分物理层和逻辑层  1.1.2 软件层的特征  1.1.3 软件分层的优点  1.1.4 软件分层的缺点  1.1.5 Java应用的持久化层  1.2 软件的模型 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

    第1章 Java应用分层架构及软件模型  1.1 应用程序的分层体系结构  1.1.1 区分物理层和逻辑层  1.1.2 软件层的特征  1.1.3 软件分层的优点  1.1.4 软件分层的缺点  1.1.5 Java应用的持久化层  1.2 软件的模型 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

    第1章 Java应用分层架构及软件模型  1.1 应用程序的分层体系结构  1.1.1 区分物理层和逻辑层  1.1.2 软件层的特征  1.1.3 软件分层的优点  1.1.4 软件分层的缺点  1.1.5 Java应用的持久化层  1.2 软件的模型 ...

    性能测试需要搞懂的问题.pdf

    8. **J2EE应用服务器容器**:为Java应用程序提供运行环境,管理组件的生命周期,如Servlet容器、EJB容器等。 9. **内存泄露**:程序中未释放的不再使用的内存,导致系统可用内存逐渐减少。Java可通过内存分析工具...

    Java基础之模式和框架的介绍和区别.pdf

    设计模式有助于提高代码的可读性和可维护性,提供了一种标准化的思考和设计问题的方式。 框架则是一种半成品的软件结构,它为开发者提供了一个基本的架构,以便他们可以在其上构建自己的应用程序。框架通常是成熟且...

    Java自学路线.pdf

    此外,学习Struts等框架的工作原理,了解它们是如何应用页面助手、前端控制器和应用控制器等设计模式的。 继续深入,你会思考性能、并发性、扩展性、复用性以及如何选择合适的框架和ORM工具。阅读JDK API文档将成为...

    Spring Framework 概述.rar

    为什么会获得成功,并告诉你我十分肯定它能帮助你开发J2EE 应用程序。 又是一个框架? 你可能正在想“不过是另一个的框架”。如今有这么多J2EE 框架,并且你可以建立你自 己的框架,为什么你应该读这篇文章...

Global site tag (gtag.js) - Google Analytics