J2EE开发架构大总结

J2EE开发架构大总结nbsp 一些主流的架构模式 总结一下 nbsp 宏观上讲 我们采用了分层的架构 将软件分为如下的层次 nbsp 在具体的实现中 表现层可为 Struts JSF 等 业务层 访问层可为 JavaBean 或 EJB 等 资源层一般为数据库 nbsp 宏观上的层次就是这样 在具体现实中 有如下几种实现形式 1 轻量级实现 nbsp nbsp nbsp nbsp nbsp 表现层使用基于 MVC 的框架 比如 Struts 或 JSF nbsp nbsp nbsp nbsp nbsp nbsp 业务层使用 Ja

 

一些主流的架构模式,总结一下:

 宏观上讲,我们采用了分层的架构,将软件分为如下的层次:

 在具体的实现中,表现层可为Struts/JSF等,业务层、访问层可为JavaBean或EJB等,资源层一般为数据库。

 宏观上的层次就是这样,在具体现实中,有如下几种实现形式:

1。轻量级实现

       表现层使用基于MVC的框架,比如Struts或JSF

       业务层使用JavaBean(就是常说的Service)

       访问层使用JavaBean(就是常说的DAO)

优点:

  •  轻量级实现,简单明了

缺点:

  •  难以无法实现分布式应用
  •  以下功能必须通过编程实现
  •  事务控制
  • 资源管理(包括组件的创建)
  • 线程安全问题
  •  安全性

2, 重量级J2EE实现
 

       表现层依然是基于MVC的框架

       访问层采用实体Bean实现,如果可能最好采用CMP,实现起来更简洁。此处的实体Bean可以考虑采用本地接口

       业务层一分为二,服务控制器可以由会话Bean充当,用来封装业务流程(相当于轻量级实现中的Service),也可以考虑采用本地接口;门面也可以由会话Bean充当(一般来说无状态会话Bean足矣),作为业务层的入口,应该采用远程接口。

优点:

  • 以下功能可由EJB容器自动实现,或通过配置实现
  • 事务控制
  • 远程访问
  • 线程安全
  • 资源管理
  • 安全性
  • 可以进行分布式应用
  • 因为采用了EJB,故部分特征可以由装配人员来配置(比如事务,安全性等),不需要在软件中硬编码
  • EJB组件有更好的重用性
  • 可利用容器提供的其他企业级的功能(比如集群,容错,灾难恢复等)
  • 可以加入MDB(实现异步通讯)等技术

缺点:

  • 开发难度较高
  • 如果不恰当的使用实体Bean,会造成效率低下。如果采用CMP,则很多数据访问的操作不能直接实现。
  •  缺少良好的开发环境
  • 软件可能依赖于具体的EJB容器
  •  EJB容器可能很贵,开发软件也可能很贵

3, 轻量级和重量级J2EE的切换
 

如果项目有需求,并有充分的时间,还可以通过在表现层和业务层的交界处加入“业务代表”(JavaBean + 服务定位器实现)来对表现层隐藏对业务层访问的细节(JavaBean和EJB的访问方式显然不同),只需替换“业务代表”就可以切换轻量级和重量级两种实现。举例说明,一般电话上都有一个P/T开关(脉冲/音频开关),随着开关状态的不同,拨号时电话机会判断是使用脉冲拨号还是音频拨号。

这种架构唯一的缺点就是必须写两套实现代码……

4, 轻量级J2EE实现

访问层通过JavaBean调用ORM框架实现(Hibernate,iBatis等),代码简洁,功能完备(相对于EJB 2.x而言),如果用的是Hibernate,可以忽略底层数据库的差异,如果用的是iBatis,则方便对SQL进行优化。

业务层和访问层依靠AOP框架(如Spring)可以在切面中实现事务,安全性等功能,同时不影响业务代码。如果采用Spring,其中已经内置了事物切面,并可以轻易的与主流ORM框架进行整合,实现声明式的事物管理。当然,更可以使用IoC模式降低组件间的耦合性。

优点:

  • 可以通过AOP框架实现事物、安全性等功能,同时不影响业务代码
  •  ORM框架比CMP更灵活,比BMP更简洁(相对于EJB 2.x而言),运行效率也比较高
  •  如果使用Spring,可以用更简单的方式实现J2EE中比较复杂的功能
  •  无需额外的容器
  •  ORM和AOP框架可以找到免费的开源实现,降低项目成本(不过也有人认为采用开源项目可能综合成本更高)

缺点:

  • 非官方框架,缺少文档、技术支持和业界经验
  • 采用技术太多,学习曲线较高,难以招到合适的程序员(咱们学员可以考虑在这方面下点功夫,呵呵)
  •  某些企业级的功能轻量级框架还不能实现(或独立实现)
  •  测试、调试均比较复杂

5, 其他另类实现

另类之处:

        使用BMP + Hibernate(具体做法为BMP中的持久化方法,比如ejbLoad, ejbStore等都委托给Hibernate实现)

优点:

  •  借助于Hibernate强大的ORM功能弥补CMP的不足(特别是EJB-QL)

缺点:

  •  事物不好控制
  •  不伦不类,容易发生未知的错误(比如Hibernate自身的缓存可能会于容易提供的缓存冲突)

 

        将业务层(也可能包含访问层)包装成Web Services,支持远程调用

优点:

  •  借助于Web Services可以实现松散耦合分布式应用,说的大一点,就是传说中的SOA,呵呵

缺点:

  •  Web Services自身效率不高,无状态,安全性差
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220890.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午7:25
下一篇 2026年3月17日 下午7:26


相关推荐

  • Myeclipse7.5 下载 安装 注冊 注冊码 100%成功

    Myeclipse7.5 下载 安装 注冊 注冊码 100%成功

    2021年12月16日
    42
  • 新建表sql语句

    新建表sql语句一、新建表新建学生表(student):createtablestudent(idintnotnull,namevarchar2(50),sexvarchar2(25),birthdayvarchar2(225),createtimetimestamp,primarykey(id));给表和字段添加注释:commentonta

    2022年10月16日
    7
  • 零基础学Java(7)大数

    零基础学Java(7)大数大数如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中两个很有用的类:BigInteger和BigDecimal。这两个类可以处理包含任意长度数字序列的数值。BigInte

    2022年7月29日
    10
  • Calendar类简介

    Calendar类简介Calendar 类简介 Calendar 是 javautil 包下的一个工具类 提供了很方便的不同日期格式的处理 啥也不说了 直接撸代码 publicstatic String args System out println Calendar 无参构造 Cal

    2026年3月20日
    1
  • 新手组装矿机_BTD挖矿

    新手组装矿机_BTD挖矿离上次发挖矿的教程已经过去两个多月了。这两个多月发生了什么事情呢?特斯拉买入15亿美刀BTC美图也不修图买BTC和ETH去了美国一大波ETF申请中加密币交易所coinbase快要上市了20多万一枚的比特币冲到了40万2100一张的二手1660s涨到4000多了…..这段时间我也没有闲着,断断续续收了十几张卡,装了三台矿机。趁着第一波投入已经回本的好心情,给大家分享一下装显卡矿机的经验。(不做投资建议,不送显卡,要不要高位站岗完全看你们自己!)我本来是没时间来.

    2022年9月30日
    6
  • 手机qq空间各种代码_QQ空间仅彼此可见

    手机qq空间各种代码_QQ空间仅彼此可见手表代码↓[em]e10026[/em]{uin:5720,nick:GoldVish,who:1}相机代码↓[em]e10022[/em]{uin:5720,nick:拍摄于07月22日,who:1}{uin:5720,nick:阿尔及利亚天气:阴,who:1}飞机代码↓[em]e10020[/em]{uin:5720,nick:乘坐于巴西天马航空JJ8280航班(A舱),who:1}认证代码↓[em]e10023[/em]{uin:5720,nick:文字已通过..

    2022年8月10日
    13

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号