企业级软件
“企业”是指一个为实现某个共同目的而在一起工作的人或实体的组织(有大有小、有盈利有非盈利、有政府有非政府)。
企业通常都有一些共同的需求,例如信息共享与处理、资产管理与跟踪、资源规划、客户及用户管理、商业机密保护等。“企业级软件”就是能够支付企业共同 需求的这类软件的总称。
企业级软件由多个不同部分组成,今天企业已逐渐认识到,只要合乎企业利益,很有必要将各个分散的系统进行良好的集成,以尽可能相互支持(比如B2B、B2C)。随着企业规模的不断扩大、拥有更多的员工和更多的客户、更多的web站点访问量、更高的销售额和收入、更多的部门...,企业软件面临各种各样的难题,如何将原来独立的系统连接起来以提高企业的效率;计算机硬件跟不上企业处理需求的增长;位置的分散带来的分布式问题等等。为解决这些问题,企业级软件也随之发生着演进 。
企业级软件和开发的演进
企业级软件架构由单层到两层再到n层,不断的适应和满足企业的需求。随着企业级软件的演进,软件开发的方法也在发生着演进,从过去的面向过程的开发到面向对象的开发,在一定程度上实现了代码的重用,但要大范围的重用仍然变得很困难,于是,为解决这个问题设计了软件组件。与对象不同,软件组件是在更高的抽象 级中设计的,可以提供一个完整的功能和服务,组件间的耦合更为松散,利用组件的接口可以将组件迅速组合在一起以构建更大的应用程序,成本也更合算。
近年来已经开发出了各种不同的组件模型,例如Microsoft的ActiveX、COM;SUN的applet、Javabeans。在分布式企业软件环境中开发出了分布式的组件模型 ,用于进行基于组件的软件开发,这种组件模型实质就是为分布式的和基于组件的软件开发提供一个“操作系统”,例如DCOM、Microsoft.NET、EJB。
J2EE
J2EE为开发复杂的、分布式企业级Java应用定义了一套体系结构。
J2EE平台是建立在Java的“一次编写、随意运行”的理念上的,它通过一组技术和一套API实现,由3个关键的部分(设计指南、参考工具、兼容性组件)支持和限定,其中参考工具提供J2EE可操作视图,兼容性组件检验产品与J2EE的兼容性。
Sun努力把不同的Java技术和API融合进有内聚性的Java平台,以开发特定类型的应用程序,其中之一便是J2EE。目前存在三种Java平台,J2ME、J2SE和J2EE,从概念上讲(技术上不是必需的),后一种都是前一种的扩充。
Java 2平台概观:
J2EE J2SE J2ME
J2EE最重要的优点之一在于相比传统的软件开发它对组件化开发的支持。
理解J2EE
1、J2EE技术
要理解J2EE技术,首先必须理解J2EE体系结构中容器的作用。J2EE中现有技术都是依赖于这个简单而又功能强大的概念。
容器的概念:
容器是一种运行在服务器上的软件实体,用于管理特定类型的组件,为J2EE组件提供执行环境,保证开发与部署的无关性和可移植性;还负责管理部署在其中的组件的生命周期,诸如资源汇集和强制执行安全之类的工作。J2EE有四种不同类型的容器:
应用程序容器:管理独立的Java应用程序
Applet容器:为applet提供执行环境
Web容器:管理Web组件,如servlet和JSP
企业级容器:管理EJB组件
1)Servlet
可生成动态内容的web组件,是今天www上最常用的J2EE组件之一,提供用于基于服务器的业务逻辑和基于web的客户端之间的交互,是通用CGI脚本方法的替代 。适于处理简单的任务,数据处理,如收集和检查web页面上的输入和内容有效性,当完成了初步检查后,就会把数据传给更合适的组件处理。运行于servlet容器 (servlet引擎)中,容器管理servlet的生命周期,并通过http之类的协议,把web客户端请求解释成基于对象的请求,还解释servlet响应,把响应对象映射到合适的 web协议上。
2)JSP(Java Server Pages)
另一种类型的J2EE Web组件,是从servlet发展而来的,事实上,一部分JSP编译进servlet中并在servlet容器环境中执行。适于Web页面显示,允许将Java代码嵌入到结构话文档中(如HTML、XML中),易于把显示代码作为规则的HTML代码来维护。
3)EJB(Enterprise Java Beans)
J2EE平台的最核心部分,为构建可伸缩、分布式、基于服务器的企业级Java应用组件提供一种综合性的组件模型。EJB包括三种类型:会话Bean、实体Bean和消息驱动Bean。
2、API
1)JDBC(Java Data Base Connectivity)
JDBC API用于应用程序与数据库交互,类似Microsoft的ODBC API,简化了对关系数据库的访问。提供了一个公共的接口,以尽可能屏蔽用户之间的供应商导致的区别,JDBC实现是由数据库供应商提供的,不同的数据库的底层行为可以不同。在企业应用程序中,不必直接使用JDBC,如可以使用实体Bean来调用必要的数据库,因实体Bean提供了更先进的支持。
2)Java命名和目录接口(JNDI:Java Naming and Directory Interface)
命名服务允许你查找和查阅一个对象,文件系统就是一个命名服务的例子,目录服务于命名服务类似,并提供了增强的搜索功能,事实上,目录服务总是带有命名服务(反过来不成立)。
3)JMS(Java Message Service)
消息传递服务允许使用被称为消息的功能完备实体在分布式应用程序间通信,一般是异步的。JMS可以直接在企业应用程序中使用,也可以通过消息驱动Bean在企业应用程序中使用。
4)远程方法调用(RMI:Remote Method Invocation)
不是J2EE独有的,允许Java对象调用远程Java对象上的方法,从而使人们可以访问分布式环境中的组件。
3、其他J2EE技术和API
1)J2EE连接器
2)Java事务API(JTA)
3)Java IDL
4)RMI-IIOP
5)Java事务服务(JTS)
6)JavaMail
软件体系结构
程序或计算机的软件体系结构是一种结构,或者说是系统的结构,包含了软件组件、这些组件的外部可见性和组件间的关系。软件体系结构还涉及了...用法、功能、性能、灵活性、重用性、综合性、经济和技术上的约束和折衷,以及美学上的要求。软件体系结构是多方面的, 在表示指定软件的体系结构时,无法使用单一的图表来表示,不能被认为仅仅是代表了系统的基础结构和具体设计。只要软件被创建,体系结构就存在着,真正的问题不是你的软件是否需要体系结构,而是你是否需要细致的去创建它。
企业级应用体系结构中的主要概念
这些都是系统结构设计者所用使用的必要工具,而不是所有软件工程必须应用的概念。
1、分解
分解是将系统划分成更小的更合理的程序块,可以更容易的处理复杂的情况。模块、子系统和组件都是分解后的产物。
2、组件
组件是指软件的内在单元,可以提供相关的功能和服务。可以单独的接口开发和发布,本省就已经模块化了,但只能用于组件模型环境中,组件模型为组件的合成、交互作用提供基础结构。EJB、JavaBean、COM都属于组件模型。遵照同一组件模型的组件,由于接口是一样的可以相互替换。细粒度的组件在功能和作用域上与传统的对象相似。组件通常还具有更复杂的行为,可以通过组件建模更深入的理解。
3、框架
框架最简单的形式是指已开发过并已测试过的软件的程序块,这些程序块可以在多个软件开发工程中重用。框架提供一个概括的体系结构模板,我们可以用这个模板来构建特定领域中的应用程序。可以用两种基本的方法来使用框架。第一种方法是库方法,可用框架建立一组可重用的组件。第二种是利用框架为新工程创建一个模板,或定义特定类型系统的体系结构。
4、模型
软件模型是一种从经验中提取抽象出来的可重用的设计方法,能够成功的解决一些特殊的问题。软件模型通常可以分为几种类型:分析模型、体系结构模型、设计模型和编码模型,各个模型之间最主要的区别是抽象的级别不同。
设计模型:
5、分层
大规模的企业级软件比较难以开发和管理,分层就是一种用来进行分解的模型,分解可以将系统按逻辑分为子系统和模块,而分层是对子系统进行分组和隔离,从而约束那些可以使用子系统、组件和模块的人。
6、层
层主要处理多个分立进程中软件系统的分配问题,进程可以物理的分布于多个处理器或驻留在同一台物理设备上。层可以同步执行系统内的具体任务,例如:表示、物理逻辑、数据访问等等。今天其主流已经发展成使用多层的体系结构。
J2EE层:
客户层(Client) 主要与用户的交互作用有关
表示层(Presentation) 用来表示事务查询的结果
业务层(Business) 包含主要的业务规则
数据层(Data) 提供接口进行不变数据存储
开发软件体系结构的方法
1、J2EE视图体系结构:
J2EE体系结构基本原理:层(tier)+组件+服务
J2EE建议使用MVC体系结构来开发企业级应用程序。
2、4+1视图模型体系结构:
逻辑视图模型:用来设计包、子系统和类
实现方法视图:描述软件的物理结构,如可执行文件、库、源代码等等。
过程视图:与软件的并发有关,如过程、任务和线程都属于软件系统的一部分。
部署视图:用于将可执行文件映射为物理节点和可执行计算的硬件。
用例视图:一种特殊的视图,因为它将所有其他视图配合在一起使用。
另外还有包括诸如:安全和事务处理视图。
3、Hofmeister等:4种视图体系结构
概念视图:概念上系统合理地分解粗粒度组件(又称为舱块)。
模块视图:用于实现舱块和连接器。粗粒度组件会映射为实际的子系统和模块。
执行视图:处理运行时系统中的控制流,包括问题有并发、分布和性能。
代码视图:具体化组件是如何映射为源文件和可执行文件的,以及与之相关的内容(如构建时间和开发工具等)。
MVC(Model View Controller)
模型视图控制器体系结构按照永久性数据和关联的规则(模型)、显示(视图)、及应用程序逻辑(控制器)这些领域对象特定的职责对系统中的对象进行排列,从而把系统中对象间的耦合减至最小。
模型的职责是维护应用程序状态和数据。可以接收来自视图的查询并作出响应,以及当情况发生变化时给视图发出一条通知。控制器基于应用程序逻辑的执行模型,以响应用户的示意(对话按钮、表单提交请求等等),还告诉视图响应用户示意所要显示的内容。视图的职责是真正提交有控制器提供的数据
例子:
一个用MVC方法开发的简单时钟应有程序,在这个例子中:模型的职责是记录时间,时间是通过模型中的一些内置机制以预定义的时间间隔自动更新的。它提供一些操作,是其他实体可以查询模型并获得当前的时间,它不关心时间是如何显示的。视图负责显示时间,可以用不同的形式显示时间,如模拟显示、数字显示。时钟需要一些更新机制来更新时间,比如当夏令时生效时,用户也许有能力通过使用GUI控制来改变时间显示,控制器接收用户作这种改变的指示,并调用模型中定义的合适的操作来更新模型以反映新的时间。
MVC是用于Web开发一种框架设计模式,实现了页面设计与后台处理之间的逻辑分离,健壮性,扩展性...,MVC可以用于Java Web Project ,开发多了,前人们就帮我们封装提供了Spring , Hibenate ,Structs等框架。也可以用于.Net Web Project,开发多了,前人们就帮我们封装提供了ASP.NET MVC框架。
Java中使用MVC:
附:
1)统一建模语言UML简介:UML简介
2)使用UML:从分析客户需求到总体设计
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>