您的位置:首页 > 运维架构 > 网站架构

软件项目整个架构分析说明

2009-10-14 16:24 531 查看
[align=center]软件项目整个架构分析说明[/align]
前面我写了几篇有关在jboss上运行的java程序的小文章,今天没事翻回头看了看,感觉有点东西想说,可能很多朋友看了前面的几篇文章感觉有点不知所云。那就怪我没有说清楚吧。那些都是一点点感性上的认识,大家之所以看不明白不是看不懂某项技术,而是不知道这些都做什么用的。在后面我会写些有关ejb3的文章,今天这篇文章我要做个整体的说明,包括ejb3,j2ee,jsp,servlet之类的名词都将出现。这些名词之间的关系也是我要说的重点。
我不太喜欢全是文字,首先给大家一个图看看:



[align=center] 图一 [/align]
我用了一个简单的组件图来表示一个项目的整体内容。我们看到他们之间有包含、依赖、调用、同级等等关系。大家仔细看一下,在这个图上停一分钟,再看下面的文字,要是看不清楚的话,附件里面有个清楚的可以下下来看看。
不知道大家看出点什么来了吗?要是没有就怪我没有画明白的吧,我现在来解释一下上面的图。首先我要明确一下我们看到是一个整个的项目,现在这个里面是java的,其实将里面技术做点变化的话.net项目也是差不多的。我先有java来说事情。大家都是大名鼎鼎的mvc框架,看看是不是有点像呢?我估计这个也是参照着mvc框架的灵感来的吧(这个纯属我个人观点)。对于整个项目而言,其实他就是由不同的部分组成的,我用组件图来画这个图就是出于这个理由,其实我们也可以转换一些名词来说,这样子是为了方便大家理解,比如说“container”。容器这个概念是个好东西,因为他十分的灵活,在软件架构设计中很多时候,都是在思考容器问题,在贴近代码点说的话叫做“package”。包的概念大家就很熟悉了吧,包的设计和规划是很多设计师最为头疼的问题了。哈哈,要是您觉得是话,我想我们是很有共同语言的。
说了些名词上面的铺垫,我们回到上图来。我从宏观角度上来做说明。左边是显示部分、中间就是逻辑部分、右边是数据库部分了。
显示部分中包含一些容器,ie客户端、应用程序客户端、其他项目的接口端、J2ME的手机客户端程序之类的,他们是可以增减的,根据不同的项目我们需要的相关容器也是不同的。
中间是我们的重点,也是在项目开发中工作量相对较大的部分,就是整个J2EE平台。我们熟悉的jsp、servlet、ejb,我在前面已经简单说过jsp、servlet(现在大家知道他们在整个项目中所在的位置了吧),他们在J2EE平台里是一个与显示端交互的容器,这个也是可以增减的,我们只用其中一种的话完全可以。Ejb容器是一个与显示端交互的容器同级的容器,他里面跑着整个ejb3的服务内容。现在被媒体炒得火热的SOA,就是如何在“这一层容器”内部,跑何种结构的服务的问题(之所以叫这一层容器是因为,我们现在在说ejb3,但其实容器的概念是很广泛的,.net里面或者java中的别的容器也可以按照SOA的理念来设计,我不希望朋友们只把他局限于ejb3)。在ejb3容器里面,在细一个层面的问题我们稍后再说。
右边的数据库部分,就是我们所存储数据所用的数据库,他的作用就不细说了,做开发的都知道吧。
上面的东西如果都看懂了的话我们来针对ejb3进行下一步的微观。
前面说了中间的J2EE平台是我们这次说的重点。现在我将内容锁定到J2EE平台上面来。看上图,我们得知,ejb3负责的工作就是将数据库中的数据拿到,做相关逻辑上面的组合或者拆分,将其包装成一个一个服务容器,以接口的形式暴露出去。Jsp和servlet则是将这些服务以友好的界面形式告诉ie客户端,从而显示给最终用户。
我们来看ejb3容器,如下图:



[align=center]图二[/align]
现在我们进入相对刚才来说微观一点的ejb3容器里面了,在前面我们已经整个ejb3容器在项目中的位置。结合这个位置,我们看里面子容器(或者说子组件)是什么样子的。Ejb3容器在整个项目中呈现的作用是一个承前启后的作用,这个是根据他所在的位置决定的,位置决定功能嘛。
我们看到,在ejb3容器里,主要包含三种子容器session bean、driver manage bean和entity bean。
1、 session bean对于上级(代码或者使用者)而言,就是提供一个同步的服务。

2、 driver manage bean对于上级(代码或者使用者)而言,就是提供一个异步的服务。

3、entity bean主要是为上面两种bean服务的,他的功能就是将数据库中的关系数据以一种对象的方式呈现出来,他的工作就是关系数据和对象数据的转化。其实现在也有一些很好很成熟的技术来做这个工作。比如:java著名的hibernate技术(他的映射思想很完美的解决了这个问题,甚至很多别的技术都是用这种映射思想,比如说jboss中间件在很大程度上就是用了这个思想。还有我们这是说的ejb3和他前面的版本ejb2也很成功的使用了映射思想)、.net也有相对应的nhibernate技术。
上面的东西如果都看懂了的话我们来针对ejb3中的各个容器再进行下一步的微观。
我们都知道我们通过页面访问数据库也好、文件也好,主要是由两种方式访问的,一种是我在页面上点击后直接看到结果,也就是我们所说的及时同步响应。还有一种是我在页面上做一个操作,这个操作要是比较复杂的话可能不会即使的反应给我,但是我们也不能看着电脑干等着是吧,那么我们就将这个操作记录下来,放到后台做,我们可能现在不能马上等到结果,操作完成时会再此通知我们刚才的操作以完成,这就是非及时异步响应。那么我们在进行服务发布的时候也会针对这两种类型的响应设计相应的服务,即Session bean、Driver manage bean。我们有了这两种bean,但是他现在还有一点不好就是和数据库打交道需要根据E-R连安排结构而不是能和对象打交道的这种方式,于是entity bean孕育而生。其实我们仔细想一下,这三种bean都不是凭空而来的,他们都是有根有据的。
Session bean主要分成两类,stateless和stateless。有状态会话bean和无状态会话bean的区别主要在于有状态会话bean可以存放一些需要的信息。
Driver manage bean主要分成queue和topic两种。Queue是点对点消息,topic是发布/部署消息。他们两者之间的主要区别在于消息发布方式的不同。
Entity bean主要的工作室通过O-R-mapping技术来让上层使用对象数据而非E-R关系的数据。
以上文章我将开发软件项目的整个体结构进行了一个分析和解释,我相信大家已经对其有了比较详细的了解了。在以后的文章里我将会以ejb3为主体说下各个容器。还有一些与之层面上相关的架构。比如显示层主要用的struts架构,逻辑层主要用的spring架构,持久层主要用的hibernate架构。还有ejb3里面各个bean,以及jms,jca等内容。本文出自 “张隽永” 博客,谢绝转载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: