使用open source产品组装你的web应用架构(四) 转载

转载 2004年09月10日 21:09:00

使用open source产品组装你的web应用架构()<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

 

提供一个服务定位器(Providing a Service Locator

 

既然我们已经将我们的SericesDAO搭配起来了。我们需要把我们的Service显示到其他层。 这个通常是在Struts或者Swing这层里编码。一个简单方法就是用 服务定位器返回给Spring context 。当然,可以通过直接调用Spring中的Bean来做。

 

下面是一个Struts Actin 中的服务定位器的一个例子。

 

 

 

 

 

 

 

 

UI 层配置 UI Layer Configuration

这个例子里UI层 使用了Struts framework. 这里我们要讲述一下在给程序分层的时候, 哪些是和Struts部分的。我们就从一个Struts-config.xml文件中的Action的配置信息开始吧。

struts-config.xml file.

 

SaveNewOrder 这个Action是用来持久化UI层里的表单提交过来Order的。这是Struts中一个很典型的Action;  注意观察这个Actionexception配置,这些Exceptions也在Spring 配置文件(applicationContext-hibernate.xml)配置了(就在 business service object transactionAttributes属性里)。 当异常在业务层被被抛出时,我们可以控制他们,并适当的显示给UI层。 

第一个异常,OrderException,在持久层保存order对象失败的时候被触发。这将导致事物回滚并且通过BO把异常回传到Struts这一层。

第二个异常,OrderMinimumAmountException也同第一个一样。

 

 

搭配整和的最后一步 通过是让你显示层和业务层相结合。这个已经被服务定位器(service locator)实现了(前面讨论过了), 这里服务层作为一个接口提供给我们的业务逻辑和持久层。 

 

SaveNewOrder Action Struts中用一个服务定位器(service locator)来调用执行业务方法的。 方法代码如下:

 

public ActionForward execute(

  ActionMapping mapping,

  ActionForm form,

  javax.servlet.http.HttpServletRequest request,

  javax.servlet.http.HttpServletResponse response)

  throws java.lang.Exception {

 

  OrderForm oForm = (OrderForm) form;

 

  // Use the form to build an Order object that

  // can be saved in the persistence layer.

  // See the full source code in the sample app.

 

  // Obtain the wired business service object

  // from the service locator configuration

  // in BaseAction.

  // Delegate the save to the service layer and

  // further upstream to save the Order object.

  getOrderService().saveNewOrder(order);

 

  oForm.setOrder(order);

 

  ActionMessages messages = new ActionMessages();

  messages.add(

      ActionMessages.GLOBAL_MESSAGE,

            new ActionMessage(

      "message.order.saved.successfully"));

 

  saveMessages(request, messages);

 

  return mapping.findForward("success");

}

 

总结

       这篇文章在技术和构架方面掩盖了很多低层的基础信息, 文章的主要的意图在于让你意识到如何给你应用程序分层。  分层可以“解耦”你的代码——允许新的组件被添加进来,而且让你的代码易于维护。  这里用到的技术只是专注于把“解偶”做好。 不管怎样,使用这样的构架可以让你用其他技术代替现在的层。 例如,你可能不使用Hibernate实现持久化。既然你在DAO中面向接口的编程的,所以你完全可以用iBATIS来代替。或者,你也可能想用Struts外的其他的技术或者框架替换现在的UI层(转换久层,实现层并不应该直接影响到你的业务逻辑和业务服务层)。 用适当的框架搭建你的Web应用,其实也不是一件烦琐的工作,更主要的是它“解耦”了你程序中的各个层。

 

 

后记:

      看完这篇文章后,只是觉得很喜欢,于是就翻译了,当然同时也准备着挨大家扔来的鸡蛋:)。

      这篇文章里并没有太多的技术细节,和详细的步骤。如果你从未使用过这些框架而在运行实例程序遇上困难的话,可以到CSDN论坛Java Open Source版发贴,我一定会详细解答的(啊哦,这不算做广告吧?),

      文章是从一个构架的角度讲述了如何搭配现有的开源框架进行分层,  有太多的术语我都不知道怎么表达,而且可能有很多语句存在错误。如果影响了你的阅读,请你直接点原文地址,我同时也象你说声抱歉。

 

作者简介:Mark Eagle 高级软件工程师,亚特兰大。

翻    译:Totodo(zhangli@telecomjs.com) 软件工程师

 

 

参考:

Strutshttp://jakarta.apache.org/struts/index.html

Spring: http://www.springframework.org

Hibernate: http://www.hibernate.org

           http://www.hibernate.org.cn

关于控制反转IOC和依赖注射:http://www.martinfowler.com/articles/injection.html

四旋翼无人机原理以及组装过程

1.硬件组成:机架,4个螺旋桨, 4个电机,4个电调,1信号接收器,1个飞控板,1个 稳压模块,一个电池 螺旋桨:四个螺旋桨都要提供升力,同时要抵消螺旋桨的自旋,所以需要正反桨,即对角的桨旋转反向相同...
  • u013693367
  • u013693367
  • 2017年12月06日 22:11
  • 399

飞越650四轴无人机安装全程详解(多图)

本文详细介绍了飞越650Sport四轴无人机安装全过程,并对安装过程中的注意事项做了总结说明,可以作为安装650四轴无人机的参考教程来使用,希望对想要入魔的童鞋有所帮助。试飞前的检查与试飞、调参步骤将...
  • iracer
  • iracer
  • 2016年10月22日 23:25
  • 12930

failed to open file mysql,导入mysql数据库打不开的解决办法

使用mysql导入数据库时很不凑巧的出现: Failed to open file 'xxx.sql', error: 2 主要的原因在于mysql没权限读取你指定导入盘符的权限。 so 我们此...
  • zch501157081
  • zch501157081
  • 2016年05月09日 11:15
  • 3623

产品开发的组织架构和开发管理

摘要:产品开发的组织架构和产品开发过程管理是一个软件企业开发管理的两个侧面,开发组织架构指软件项目的立项和项目开发有效的人员调配和组织,开发过程管理指在项目确定后,软件开发过程的管理。本文根据作者在建...
  • liubing8609
  • liubing8609
  • 2013年07月17日 22:04
  • 1563

23种设计模式分析(2):创建型模式

fadfd
  • zhoudaxia
  • zhoudaxia
  • 2014年04月04日 17:50
  • 1773

开源(Open Source)那些事儿 (一)

背景 最近有幸参与了王克伟的开源项目iToday,详情可以参考 我在Windows嵌入式系统上的一个绚丽用户界面开源项目(iToday)。克伟的号召力超人,Q群一下子就爆满200人。如果扩容了,大家有...
  • peixiuhui
  • peixiuhui
  • 2013年07月12日 10:42
  • 1413

产品经理分析模型大全

SWOT SWOT 模型是一种常用的战略规划分析方法,代表分析企业的优势(strengths)、劣势(weakness)、机会(opportunity)和威胁(threats)。 适用场景:竞...
  • byfworking
  • byfworking
  • 2016年03月29日 11:50
  • 1501

20130221-STM32关于各种头文件No such file or directory的详细解决方法

初学STM32经常学习会网上找的例程,或是买的开发板带的例程等等,经常在编译的时候遇到 ..\User\stm32f10x_it.c(26): error:  #5: cannot open sou...
  • sy_lixiang
  • sy_lixiang
  • 2013年02月21日 13:49
  • 14720

JAVA BEAN反射组装数据小工具

之前开发java服务端,因为查询使用的是SpringData,好多一查询都都查出来了,返回给前端好多数据都是没用的,自己抽空做了一个小工具,用来反射字段 package test; import ...
  • u010356086
  • u010356086
  • 2017年01月07日 17:48
  • 153

open-falcon监控系统简介

背景 我们的监控系统open-falcon开源在即,需要在所有机器上部署falcon-agent采集机器硬件信息。我们内部使用一个自研工具frigga来管理各种agent,包括监控的agent、部署...
  • fishmai
  • fishmai
  • 2016年07月03日 21:53
  • 13037
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用open source产品组装你的web应用架构(四) 转载
举报原因:
原因补充:

(最多只允许输入30个字)