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

原创 2004年04月12日 12:29:00

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

 

一个简单例子

 

既然我们已经从全局上理解这些组件。 现在就让我们开始实践吧。 我们还是用 StrutsSpring Hibernate。这三个框架已经被描述够多了,这里就不重复介绍了。 这篇文章举例指导你如何使用这三个框架整合开发,向你揭示 一个请求是如何贯穿于各个层的。(从用户的加入一个Order到数据库,显示;进而更新、删除)。

 

从这里可以下载到程序程序原代码(download

 

既然每个层是互相作用的,我们就先来创建domain objects首先,我们要在这些Object中要确定那些是需要持久化的,哪些是提供给business logic,那些是显示接口的设计。  下一步,我们将配置我们的持久层并且定义好HibernateOR mappings。然后定义好Business Objects。有了这些组成部分之后,我们将 使用Spring把这些连接起来。 最后,我们提供给Spring一个持久层,从这个持久层里我们可以知道它是如何与业务逻辑层(business service layer)通信的,以及它是怎样处理其他层抛出的异常的。。

 

域对象层(Domain Object Layer

 

这层是编码的着手点,我们的编码就从这层开始。 例子中Order OrderItem 是一个OneToMany的关系。 下面就是Domain Object Layer的两个对象:

 

·     com.meagle.bo.Order.java: 包含了一个Order的概要信息

·     com.meagle.bo.OrderLineItem.java: 包含了Order的详细信息

好好考虑怎你的package命名,这反应出了你是怎样分层的。 例如 domain objects在程序中可能打包在com.meagle.bo内。  更详细一点将打包在com. meagle.bo的子目录下面。business logic应该从com.meagle.serice开始打包,而DAO 对象应该位于com.meagle.service.dao.hibernate。反应FormsActions 持久对象(presentation classes) 应该分别放在 com.meagle.actioncom.meagle.forms包。 准确的给包命名使得你的classes很好分割并且易于维护,并且在你添加新的classes时,能使得程序结构上保持上下一致。

持久层的配置(Persistence Layer Configuration

建立Hibernate的持久层 需要好几个步骤。 第一步让我们把BO持久化。 既然Hibernate是通过POJO工作的, 因此Order OrderLineItem对象需要给所有的fileds 加上getter,setter方法。 Hibernate通过XML文件来映射(OR)对象,以下两个xml文件分别映射了Order OrderItem对象。(这里有个叫XDoclet工具可以自动生成你的XML影射文件)

  • Order.hbm.xml

  • OrderLineItem.hbm.xml

你可以在WebContent/WEB-INF/classes/com/meagle/bo目录下找到这些xml文件。Hibernate SessionFactory 是用来告诉程序 应该与哪个数据库通信,该使用哪个连接池或使用了DataSource 应该加载哪些持久对象。而Session接口是用来完成SelectingSavingDeleteUpdating这些操作。 后面的我们将讲述SessionFactorySession是怎样设置的。

 

业务层的配置(Business Layer Configuration

 

既然我们已经有了domain objects,接下来我们就要business service objects了,用他们来执行程序的logic,调用持久层,得到UI层的requests,处理transactions,并且控制exceptions 为了将这些连接起来并且易于管理,我们将使用面向方面的 SpringFramework Spring 提供了 控制倒置(inversion of control 0==IoC)和注射依赖设置(setter dependency injection)这些方式(可供选择),用XML文件将对象连接起来。 IoC是一个简单概念(它允许一个对象在上层接受其他对象的创建),用IoC这种方式让你的对象从创建中释放了出来,降低了偶合度。

 

 

这里是一个没有使用IoC的对象创建的例子,它有很高偶合度。

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />CSDN_Dev_Image_2004-4-111703420.gif

2.没有使用 IoC.    A 创建了 B C

 

而这里是一个使用IoC的例子,这种方式允许对象在高层可以创建并进入另外一个对象,所以这样可以直接被执行。

CSDN_Dev_Image_2004-4-111703422.gif

3. 对象使用了 IoC A 包含了接受B,C setter方法 , 这同样达到了 A创建B,C的目的。

 

 

建立我们的业务服务对象(Building Our Business Service Objects

 

Business Object中的Setter方法接受的是接口,这样我们可以很松散的定义对象实现,然后注入。 在我们的案例中,我们将用一个business service object接收一个DAO,用它来控制domain objects的持久化。  由于在这个例子中使用了Hibernate,我们可以很方便的用其他持久框架实现 同时通知Spring 有新的DAO可以使用了。

在面向接口的编程中,你会明白 “注射依赖”模式是怎样松散耦合你的业务逻辑和持久机制的:)。

 

下面是一个接口business service objectDAO代码片段:

 

public interface IOrderService {

  public abstract Order saveNewOrder(Order order)

    throws OrderException,

           OrderMinimumAmountException;

 

  public abstract List findOrderByUser(

                                     String user)

                           throws OrderException;

 

  public abstract Order findOrderById(int id)

                           throws OrderException;

 

  public abstract void setOrderDAO(

                             IOrderDAO orderDAO);

}

 

注意到这段代码里有一个 setOrderDao(),它就是一个DAO Object设置方法(注射器)。 但这里并没有一个getOrderDao的方法,这不必要,因为你并不会在外部访问这个orderDao。这个DAO Objecte将被调用,和我们的persistence layer 通信。我们将用SpringDAO Object business service object搭配起来的。因为我们是面向接口编程的,所以并不需要将实现类紧密的耦合在一起。

 

接下去我们开始我们的DAO的实现类进行编码。 既然Spring已经有对Hibernate的支持,那这个例子就直接继承HibernateDaoSupport类了,这个类很有用,我们可以参考HibernateTemplate(它主要是针对HibernateDaoSupport的一个用法,译注:具体可以查看Srping API)。 下面是这个DAO接口代码:

 

 

 

我们仍然要给我们持久层组装很多关联的对象,这里包含了HibernateSessionFactory TransactionManager Spring 提供了一个  HibernateTransactionManager,他用线程捆绑了一个Hibernate Session,用它来支持transactions(请查看ThreadLocal)

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

其实,就算用Java建造一个不是很烦琐的web应用,也不是件轻松的事情。 在构架的一开始就有很多事情要考虑。 从高处看,摆在开发者面前有很多问题:要考虑是怎样建立用户接口?在哪里处理业务逻辑? 怎样持...
  • Jofee
  • Jofee
  • 2005年01月27日 12:59
  • 774

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

使用open source产品组装你的web应用架构(四)  提供一个服务定位器(Providing a Service Locator) 既然我们已经将我们的Serices和DAO搭配起来了。我们需...
  • totodo
  • totodo
  • 2004年04月12日 12:29
  • 1786

使用open source产品组装你的web应用架构

其实,就算用Java建造一个不是很烦琐的web应用,也不是件轻松的事情。 在构架的一开始就有很多事情要考虑。 从高处看,摆在开发者面前有很多问题:要考虑是怎样建立用户接口?在哪里处理业务逻辑? 怎样持...
  • chensheng913
  • chensheng913
  • 2004年10月15日 20:34
  • 6330

使用open source产品组装你的web应用架构(struts+spring+hibernate)

其实,就算用Java建造一个不是很烦琐的web应用,也不是件轻松的事情。 在构架的一开始就有很多事情要考虑。 从高处看,摆在开发者面前有很多问题:要考虑是怎样建立用户接口?在哪里处理业务逻辑? 怎样持...
  • h9s
  • h9s
  • 2004年07月28日 12:26
  • 804

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

function StorePage(){d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().tex...
  • Hisea
  • Hisea
  • 2007年06月21日 01:46
  • 435

使用open source产品组装你的web应用架构(struts+spring+hibernate)

(一) http://dev.csdn.net/Develop/article/26/26696.shtm(二) http://dev.csdn.net/Develop/article/26/arti...
  • minsj
  • minsj
  • 2004年11月03日 19:13
  • 461

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

使用open source产品组装你的web应用架构(一)  其实,就算用Java建造一个不是很烦琐的web应用,也不是件轻松的事情。 在构架的一开始就有很多事情要考虑。 从高处看,摆在开发者面前有很...
  • totodo
  • totodo
  • 2004年04月12日 12:29
  • 2339

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

下面是HibernateSessionFactory 和  HibernateTransactionManager:的配置:       class="org.springframework.orm....
  • totodo
  • totodo
  • 2004年04月12日 12:29
  • 1615

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

使用open source产品组装你的web应用架构(二) 一个简单例子 既然我们已经从全局上理解这些组件。 现在就让我们开始实践吧。 我们还是用 Struts,Spring 和Hibernate。这...
  • Explorerwen
  • Explorerwen
  • 2004年09月10日 21:06
  • 876

使用open source产品搭配你的web应用架构

http://www.onjava.com/pub/a/onjava/2004/04/07/wiringwebapps.html 使用open source产品搭配你的web应用架构...
  • yuantiou
  • yuantiou
  • 2004年06月24日 14:46
  • 562
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用open source产品组装你的web应用架构(二)
举报原因:
原因补充:

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