对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机。
 
最终发现,失败不是开源框架和数据库以及应用服务器和硬件配置的错,根源在于拙劣的设计导致。
 
希望以后大家在做项目的时候能注意点。
 

本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/83974,如需转载请自行联系原作者
相关文章
|
8天前
|
XML 开发框架 Java
【架构四】J2EE技术规范
Java2平台包含J2SE、J2EE和J2ME,分别针对桌面应用、企业级分布式应用和嵌入式系统。J2EE是企业级应用的标准,非具体产品,其核心规范包括:JDBC(统一数据库访问)、EJB(实现分布式服务)、JSP(专注页面显示)、Servlet(逻辑控制)和XML(数据交换格式)。这些技术协同工作,构建高效的企业级解决方案。
14 0
|
11月前
|
数据采集 存储 缓存
「应用架构」 EA874系列:企业应用集成概述
「应用架构」 EA874系列:企业应用集成概述
|
JSON 缓存 监控
代码分层设计
在搭建一个项目之前,除了要进行架构和业务方面的设计和分析,往往还需要对代码的结构进行规范化设计。而分层思想,是应用系统最常见的一种架构模式。
432 0
|
前端开发 小程序 机器人
DDD实战之五:战略设计之上下文映射和系统分层架构(上)
DDD实战之五:战略设计之上下文映射和系统分层架构(上)
DDD实战之五:战略设计之上下文映射和系统分层架构(上)
|
消息中间件 前端开发 小程序
DDD实战之五:战略设计之上下文映射和系统分层架构(下)
DDD实战之五:战略设计之上下文映射和系统分层架构(下)
DDD实战之五:战略设计之上下文映射和系统分层架构(下)
|
缓存 Ubuntu 关系型数据库
体系结构之部署设计|学习笔记
快速学习体系结构之部署设计
106 0
|
Java 数据库 容器
J2EE的体系架构
J2EE是Java2平台企业版(Java 2 Platform,Enterprise Edition),它的核心是一组技术规范与指南,提供基于组件的方式来设计、开发、组装和部署企业应用。J2EE使用多层分布式的应用模型。
2028 0
|
SQL 监控 大数据
如何从 0 到 1 设计、构建移动分析架构
本专题主要围绕蚂蚁金服移动开发平台 mPaaS 移动分析服务 MAS,展开分享如何从 0 到 1 设计、构建移动分析架构。
3593 0
|
监控 大数据 测试技术
测试分层
# 背景 纯属个人总结,总结下目前接触到测试方法/体系 # 个人总结 从开发架构上来分层 目前接触到项目,基本上都是如下图的架构模式(MVC),每一层都衍生出对应的测试 对应的测试: 看看市场上的测试岗位,大多数都是围绕这这些来设定的:功能测试,自动化测试,测试开发,性能测试,服...
2000 0