`

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

    博客分类:
  • 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
分享到:
评论

相关推荐

    JavaEE课程设计:票据管理系统源码.zip

    JavaEE课程设计:票据管理系统源码 JavaEE课程设计:票据管理系统源码 JavaEE课程设计:票据管理系统源码 JavaEE课程设计:票据管理系统源码 JavaEE课程设计:票据管理系统源码 JavaEE课程设计:票据管理系统...

    javaee学生信息管理系统课程设计

    【JavaEE学生信息管理系统课程设计】是一个典型的Web应用程序开发项目,它使用了JavaEE平台的Struts框架来实现。这个系统的主要目标是管理和维护学生的信息,包括登录验证、信息查看、修改等功能。在这个过程中,...

    JavaEE程序设计与应用开发源代码.rar

    JavaEE,全称为Java Platform, ...这个“JavaEE程序设计与应用开发源代码”压缩包很可能包含了一些示例项目,涵盖了上述技术的使用。通过学习这些源代码,开发者可以深入理解JavaEE的实践应用,提升自己的开发技能。

    基于JavaEE技术的在线考试系统的设计与实现

    系统的实现过程包括需求分析、系统设计、模块开发和测试等阶段。需求分析阶段,需要确定系统的功能需求和性能要求;系统设计阶段,需要确定系统的架构和模块设计;模块开发阶段,需要根据设计要求实现各个模块的功能...

    基于javaEE的新闻发布系统的设计与实现

    【JavaEE新闻发布会系统设计与实现】 JavaEE技术栈在构建企业级Web应用程序中起着核心作用,尤其在设计和实现新闻发布系统时。这个系统基于JavaEE,它提供了丰富的组件和服务,可以高效、稳定地处理新闻的发布、...

    JavaEE 程序设计与应用开发 源代码 郭克华主编

    郭克华主编的《JavaEE程序设计与应用开发》一书,通常会涵盖以下关键知识点: 1. **Servlet与JSP**:Servlet是JavaEE中的基础服务器端组件,用于处理HTTP请求。JSP(JavaServer Pages)则是一种动态网页技术,将...

    基于Java的SpringSide4 JavaEE应用参考示例设计源码

    本项目是基于Java的SpringSide4 JavaEE应用参考示例设计源码,包含241个文件,其中包括199个Java源文件、13个XML文件、7个Properties文件、5个TXT文件、4个Shell脚本文件、4个SQL文件、2个gitignore文件、2个TLD文件...

    基于JAVAEE的项目管理系统的设计与实现

    10. **文档与报告**:可能包括需求分析、系统设计、用户手册等文档,以及可能的项目管理工具如JIRA,帮助跟踪进度和问题。 通过这个项目,学生不仅可以深入理解JAVAEE平台的工作原理,还能提升项目管理、需求分析、...

    JavaEE-图书管理系统.zip

    总的来说,"JavaEE-图书管理系统"项目涵盖了JavaEE开发的多个核心技术和实践,包括Web应用开发、数据库交互、用户界面设计、团队协作等多个方面,是学习和提升JavaEE技能的绝佳实例。通过这个项目,你们不仅掌握了...

    基于javaEE网上商城管理系统

    基于JavaEE的网上商城管理系统是现代电子商务领域中的一个重要组成部分,其设计与实现是结合了互联网技术与企业管理理念的综合应用。随着互联网的迅速发展,电子商务已经深入到日常生活的方方面面,而一个高效、稳定...

    基于javaEE技术的课程设计管理系统设计与实现-毕业设计全解.docx

    《基于JavaEE技术的课程设计管理系统设计与实现》是一份深度探讨如何利用JavaEE技术构建课程设计管理系统的毕业设计说明。这份文档详细阐述了项目的背景、目标、可行性、规划、需求分析以及系统设计等多个关键环节,...

    JavaEE-毕业设计-在线考试系统

    【JavaEE-毕业设计-在线考试系统】 在线考试系统是一种基于Web的应用程序,它利用JavaEE(Java企业版)技术栈来实现,为学生、教师和管理员提供一个平台,进行在线测试、评估和管理。JavaEE是Oracle公司提供的一个...

    javaEE火车订票系统

    JavaEE火车订票系统是一个综合性的Web应用程序,主要用于模拟实际的火车票预订流程,包括车次查询、票务管理、订单处理等功能。该系统通常由前端界面、业务逻辑层和数据访问层组成,采用jsp+servlet技术栈进行开发,...

    基于Java的JavaEE企业级应用设计源码

    本项目是基于Java的JavaEE企业级应用设计源码,包含357个文件,其中包括346个Java源文件、7个TXT文本文件、2个PNG图像文件、1个Properties配置文件和1个PDF文档。系统专注于提供企业级应用功能,支持用户管理、权限...

    javaEE学生选课系统设计(报告+工程源文件+数据库)

    JavaEE学生选课系统设计是一项综合性的IT项目,它涵盖了Web开发、数据库设计以及软件工程等多个方面的知识。在这个系统中,JavaEE作为后端开发框架,用于构建服务器端的业务逻辑,实现用户交互和数据处理。以下是这...

    java毕业设计——javaEE土地档案管理系统的设计与实现(论文+答辩PPT+源代码+数据库).zip

    java毕业设计——javaEE土地档案管理系统的设计与实现(论文+答辩PPT+源代码+数据库).zip java毕业设计——javaEE土地档案管理系统的设计与实现(论文+答辩PPT+源代码+数据库).zip java毕业设计——javaEE土地档案管理...

    4.6javaEE_原生Servlet_MySql酒店管理系统的设计与实现.zip

    《基于JavaEE、原生Servlet和MySQL的酒店管理系统设计与实现》 在信息化时代,酒店管理系统已经成为提升服务质量和效率的重要工具。本项目采用JavaEE作为开发平台,利用原生Servlet进行服务器端处理,并结合MySQL...

    javaEE课程设计报告图书管理系统

    综上,这份JavaEE课程设计报告图书管理系统深入探讨了如何使用JavaEE框架开发一个完整的图书管理应用,涵盖了从需求分析、设计、实现到测试的全过程,对于学习和理解JavaEE开发具有很高的参考价值。

    基于JavaEE的滑雪场管理系统毕业设计

    基于JavaEE的滑雪场管理系统毕业设计基于JavaEE的滑雪场管理系统毕业设计基于JavaEE的滑雪场管理系统毕业设计基于JavaEE的滑雪场管理系统毕业设计基于JavaEE的滑雪场管理系统毕业设计基于JavaEE的滑雪场管理系统毕业...

Global site tag (gtag.js) - Google Analytics