2005.2.22 欧岩亮
基础内容
熟悉Microsoft .NET
.NET中的面向对象程序设计
Microsoft ADO.NET
课程介绍
如何开发企业级的应用程序
课程安排
组件化的设计
多层的应用程序设计
中间层的概念
分布式应用程序设计
团队开发
集成
组件化程序设计
目标:
创建可重用的组件
重用现有的组件来缩短开发时间
建立一贯的组件理念
制定一个组件策略
Patterns和Practices
制定一个设计-评审计划
建立知识库
给团队中的成员进行培训知识库的内容
激励团队的成员维护知识库的内容
多层应用程序体系结构
为了重用、模块化和可维护,尽量按照程序逻辑将应用程序代码划分为松耦合的层次结构
典型的3层逻辑构架
表示层
商业逻辑层
数据访问层(数据存储层)
将不同的逻辑层次部署到多个物理层当中,实现部署的可扩展性
典型的3层物理构架
表示层——UI,例如WinForms或ASP.NET页面
中间层——商业逻辑组件,一般运行在宿主环境下
数据访问层——高性能的、并发RDBMS,例如Microsoft SQL Server
3层的物理构架
物理层之间的数据传递
数据在多层之间传递的过程中必须要事先进行封装
封装数据有几种选择
DataSet——最简单的方式
XML
自定义对象——效率最高
究竟选择哪种封装方式,需要因地制宜地选择
演示一
分层的应用构架
商业逻辑层
商业逻辑层可能会经常发生变化,为了隔离变化,我们添加一个LogicFacade类,作为逻辑层前端的接口,让它帮助表示层访问逻辑层。因此在逻辑层内容变化的时候我们就不需要重新编译表示层的项目了。
表示层调用Facade接口,而不是直接调用逻辑层
物理中间层的可选方案
在宿主环境中运行商务逻辑层的组件
Web Service和System.Web名称空间(开发简单、效率低)
COM+和EnterpriseServices名称空间(效率较高)
Remoting组件和System.Runtime.Remoting名称空间(开发复杂、TCP连接效率更高、Http效率也较低)
可伸缩性!=高性能
演示二
Web Service
添加一个Web Service项目作为中间层,Global.asax文件的作用主要是IIS在加载WebService时可以给我们WebService进行初始化的机会,里面包含了一些Start和End的接口。
它的商业逻辑非常简单,它只是将原先位于表示层的数据访问层移植到WebService中,但是它的接口不变。
NorthwindModel是规定表示层与数据访问层之间数据传递时候的数据类型,例如一些强类型的DataSet和一些自定义类型。
SQL数据库中有个用户叫ASPNET,如果是默认情况下我们不对WebService进行配置的话,默认是用ASPNET角色访问数据库,那么如果想让应用程序运行正常的话,就需要再数据库安全策略中配置ASPNET的权限。
这时表示层就只需要通过WebService来访问数据,添加WebService引用。
添加引用成功
我们的WebService在编写的时候,它会引用我们的强类型DataSet。客户端Northwind工程在引用WebService时会自动把类型带过来,但是这些类型对于我们来说是一种冗余,因为我们的Northwind工程中已经引用了NorthwindModel,因此我们可以把这些引用中的DataSet删除。删除的还有一个重要原因就是直接引用NorthwindModel的名称空间和WebService服务引用的名称空间不一样。
另外,我们还需要删除引用中Reference.cs文件中的强类型DataSet类,避免和NorthwindModel中的类重复。
面向服务的构架
当为企业设计应用程序时,高可伸缩性是极为重要的设计目标
Service-Oriented Architecture(SOA)要求设计人员将代码按照层次分隔开来
代码之间建立松耦合的关系
可伸缩性——SOA能够带来更多的吞吐量,支持同时处理更多的并发请求
SOA考虑的问题
设计阶段一定要三思而后行
服务一定要设计成状态无关的
状态管理会带来很多问题
服务之间的互操作性设计
可用性设计
可伸缩性不等同于性能
易于部署
易于开发
安全设计
分布式应用程序设计
分布式计算的优势与劣势并存
支持伸缩——通常来讲,一组网络计算机的工作能力要强于单一的计算机单元
可以使用离线模型(例如Outlook)
可能会有数据并发的问题
数据缓冲
数据不能及时更新
并发冲突:两个离线的用户同时更改相同的记录并同时更新
安全性——分布式应用程序更难保证数据的安全(签名、加密)
连接问题
维护问题
团队开发
项目越大,需要的开发人员越多
组件化的开发意味着更多的开发人员能够并行开发
资源的增加与开发时间不是线性关系:加倍开发人数!=开发时间减半
项目越大意味着项目越复杂;意味着需要更好的项目管理
通过使用工具可以减轻工作的复杂度
Microsoft Visual SourceSafe——源代码管理
企业模块(Enterprise Template)
使用SourceSafe并依赖它来工作
制定代码审核计划
遵从统一的代码标准
增加人力与开发时间不是线性关系:增加一个开发人员不等于开发的时间会减半
工作量的分配要根据每一个成员的能力来制定
SourceSafe
签入(Check In)/签出(Check Out)源代码
保留代码(或文本文件)的版本历史,在必要的时候能够恢复
为工程添加标签:可以得到整个项目的一个特定的版本
可视化的比较文件版本
可以在项目之间共享文件
可以集成到Microsoft Visual Studio .NET IDE
演示三
SourceSafe
将解决方案添加到源代码管理器
添加成功,所有文件左边都有锁的状态
如果代码有修改,会签出文件。签入文件之后,文件左边会重新变回锁。
可以查看某个文件的历史版本
可以比较不同的版本
可以给当前的项目的版本添加Label
可以通过标签来方便的查看不同版本的修改
整合现有的系统
在很多企业里,他们经常同时使用多种操作系统、软件平台、RDBMS和工作流程
需要一种新的技术可以将它们整合在一起
商务希望应用新的技术,但不希望重新编写应用程序
根据不同的系统环境,我们可以选择狠多集成的方法
集成方案
设计良好的VB应用和COM应用能够很容易的整合在一起
跨平台的集成可以在不同的层次上实现:
数据库层实现集成
用桥的方式实现集成,有一些第三方的工具JIntegra,Jeneva,JCOM
Web Service实现集成,如果现有系统中基于WS的SOA构架
Web Service实现集成可以提供高互操作性,并同时具有松耦合性、可伸缩性和可用性
Enterprise Application Integration(EAI)——Microsoft BizTalk
演示四
现有组件的互操作
几个值得关注的研究主题
Patterns and Practices
Enterprise Instrumentation Framework(EIF)
Enterprise Template
Windows Services
Automated build tolls(Buildlt,NAnt)
Test-driven development(NUnit)
总结
开发大规模的应用程序需要比开发简单的应用程序投入更多的努力
用组件化的方法开发企业应用程序具有很多优势
.NET提供了很多功能和工具来帮助你简化大规模、复杂的项目开发
设计多层的应用程序有助于应用程序实现重用性、伸缩性和可扩展性
2010.10.16