《.NET下企业应用系统架构构建》由会员分享,可在线阅读,更多相关《.NET下企业应用系统架构构建(9页珍藏版)》请在优知文库上搜索。
1、.Net下企业应用系统架构构建心得在起先架构设计之前,须要了解一下架构是什么,依据IEEE标准的定义是:Architecture是一个系统的基本组织,它蕴含于系统的组件中、组件之间的相互关系中、组件与环境的相互关系中、以及呈现于其设计和演进的原则中。(Theembodiedfundamentalorganizationofasysteminitscomponents,theirrelationshipstoeachother,andtotheenvironment,andtheprinciplesguidingitsdesignandevolution.IEEEStd1471-2000)一句话
2、,架构就是软件产品的骨架,这个骨架把组件、环境纳入其中,使之能有效得发挥它们的技能。从架构、技术和需求的关系来看。一个软件产品包含了需求和技术,而架构同样是要包括需求和技术的,只是它没有全包全括这个需求和技术,应当是一些整体性的需求,尤其是一些非功能性的需求。假如在构建架构的时候,架构设计人员根本不了解企业运用的目标软件的整体需求,企业运用目标系统的整体环境,那希望架构适用明显有点强求。架构的重要性是不言自明的: 从需求、技术和架构的关系看,架构是软件产品的骨架 从软件过程上看,架构处在需求即将完成,实现起先之前,是一个承上启下的关键点 从技术上来看,架构是整体设计,包含了软件须要用到的各项技
3、术 架构确定开发过程,方法和工具,这一点都不夸张,架构确定了软件的规模,技术。很自然就觉得了资源的需求以及如何配置这些资源来进行开发 架构影响软件产品的成本,包括开发成本,测试,实施和维护成本架构事实上是软件的一部分,同样都须要遵循软件设计中要考虑的设计原则。但是,架构由于是前期设计,整体设计,又具有其须要强调的地方: 明确目标,切合需求(好用确定一切) 可扩展性易用性和易维护性平衡艺术易用性就要求系统不能过于负杂,而易维护性就要求可扩展性和敏捷性,就要求系统不能太过简洁,这就要权衡这两特性能方面的考虑。平安性架构的平安并不是说把架构的代码放到一个地方加密,是在架构设计中考虑软件的平安性能,这
4、个在先期考虑是相对重要的。 稳健性架构设计时须要纳入考虑的要素有: ApplicationInfrastructure应用的基础架构,也可以说是架构是建立在什么平台上的,bt11windows2003+.Netframework1.1,当然并不是就这么简洁,下面会有详细的讲解。 Management架构设计中要考虑用户对软件的管理方面的考虑,比如用户对性能监控的要求,用户要对软件执行各个环节的执行效率统计等等。 Security平安性是在什么地方都要考虑的,不光是软件开发。 Storage存储,面对一个企业级的应用而言,对存储的要求是要特殊留意的。 Network网络拓扑结构,以及企业对网络的
5、要求层级,数据传输要求等等。在了解了软件架构的这些本本上的东西,那么我们来搭个应用看看。以我遇到的项目为例,当然一些技术是可通用的,但这个是一个个案,不代表适用您的项目,只求沟通。先交待一下,假设:1 .系统是建立在微软的架构基础上的,MicrosoftSystemArchitecture(MSA)2 .它是一个B/S的N-Tier架构3 .同时它是一个企业级应用系统,信息平台在考虑运用N-Tier的过程中,由于系统中没有涉及到要运用跨平台的应用,在可预见的将来也不会有,所以就把WebSerViCe拿掉了。WebSerViCe从3年前就起先用,但是几个问题还是没有解决:1. WebServic
6、e从接口继承,假如两个或者两个以上的Webservice同时从相同的接口继承,由于WebSerViCe的自描述性,每个WebSerViCe都重新生成接类,就成了两个不同的类。2 .WebSerViCe本身不能被继承,同样由自描述性搞的。3 .WebService要真正做到跨平台那就须要做到跨语言,从JaVa到C#的转化时数据类型转化是相当麻烦的,基本类型之间就有很大问题,如byte,Sbyte(C#)中,当JaVa中根本就没有sbyte。早在一年半前曾用相异平台做了一个应用系统,为了处理这个数据类型转化,我曾想去掉WebSerVice。4 .WebService方法不能重载,这个很恐怖。5 .
7、WebService的平安问题。尽管WebSerViCe有其种种好处,连现在的网格都起先醉心于它,更不用说SoA了,本身就是以WebService为核心绽开的。但是,WebService究竟能走向哪里?(一空之见哦,呵呵)我们比照这些假设绽开架构,并进行设计,当然有些挚友喜爱针对一个详细的问题来,比如:事务处理,性能计数,日志处理,MVC,界面统一格式处理,统一验证,国际化问题等等,偶在下面的描述中,采纳一条线,在对上面的假设绽开时会有这些问题的探讨。一.在MS架构上的搭建平台,我们就须要了解MSA是什么东东,先看一下结构图ServersStorageDeviceRouters1.easedl
8、ineSwitcherOtherNetworkDevice(MSA的结构图)CustomerAppIication是我们要搭建的应用系统,那其下的这些部分就是系统运行的这个从软件到硬件的环境。而ApplicationinfrastructureElements是基础,像Biztalk等应用系统我们也可以拿来用。二.下面来看看ntier的结构,我信任大家确定已经特别熟识了。Common1.ayerEnHty1.ayerPresentation1.aVerWebServiceDataAccess1.aVerDB详细的了解一下这个层的关系,以及构建架构时上文提到的须要涉及到的问题。1. Presen
9、tationTier表示层分层两层,UICOmPOnentS可以干脆看作是HTM1.,UIProcess这里不是MVC,而是code-behind类。在表示层,就我所遇到须要处理的问题有: MVC(Model-Views-ControIIer)A下是否须要运用MVC始终是一个有争议的问题。A的特点是事务驱动与Code-behind,Code-behind本身就可以理解是MVC中的ContrOlIer,但是没有体现MVC的好处来,微软缺乏双向赋值的考虑。UIP(UserInterfaceProcessApplicationBlock)是微软社区里的一个开源项目。严格说来它只是一个管页面流转,不是
10、一个MVC的框架。MaVeriCkmet是一个比较轻量级的框架,简洁实现了MVC,但是也有其缺陷,而且比较老了。还有CaStIe的框架,SPring还没有完整推出。 国际化假如是一个多语言的企业应用,那就须要国际化支持,Net供应了很好的国际化支持。 页面元素格式统一转化与验证比如日期形式从yyyymm-dd须要转化成yyyymmdd”,假如没有一个统一配置的地方,那页面就要伤筋动骨了。 平安,在后面的平安节有介绍,这里先按下不提。2. WebService这里不再说了,已经去掉了。3. BusinessTierBusiness层是应用系统的核心,包括体现用户的商业运算逻辑的BUSineSS1
11、.ogic;还有保障BUSineSS1.OgiC运算平安和完整性的事务,日志,平安验证,性能管理等协助逻辑。在设计BUSineSSTier的时候要考虑的问题有:可扩展性i .将接口进行究竟在BUSineSS实现层之上,建议抽出一个接口层,遵循一般原则提倡接口编程,BusinessComPOnerItS都从一个或者一个以上接口继承,在调用代码中调用类工厂产生实例,在代用代码中建议不要运用此类的new操作符。ii .设计模式的应用适当应用模式,可以增加程序的敏捷性,可扩展性。(在设计中常常用到FaCtOry,Adapter,Singleton,Decorate,Command,TemPIate等模
12、式,建议可以重点了解一下这些模式。有时间可以详读GoF的设计模式)EXamPIe:从BUSineSS结构,戈IJ分为CRUD(增查改删,称为四架马车)和其它详细业务实现的ComPorlents,这里用DeCOrate模式,简洁实现一个继承的过程,假如你要继承两个基类,可以考虑运用此模式,当然,即使不继承基类,用Interface+Adapter同样可以实现多继承。区分业务逻辑所谓区分业务逻辑事实上在上面的描述中已有提及,大致上可以分为两类,一类是商业业务逻辑,一类则是软件功能性逻辑,起协助保障上述逻辑用,如事务,日志,平安验证等。其次类的运用频率高,实现又是特别类同的,假如提取出来,那复用价值
13、是很高的。这种区分早有定义,把抽出来的部分称之为CroSSCUt或者叫ASPeCt。这个就是AoP在事务,日志,平安验证方面的应用。先来看一下CrOSSCUt(ASPeCt)的结构表示图:HMS组件、服务的是应用这里的服务和组件主要是讲是在Applicationinfrastructure中的元素,如COM+,MSMQ,IIS,AD等等。这里常用到的两种COM+和MSMQ。i. C0M假如应用系统须要运用分布式事务,或者的确希望把组件编程一个服务,那么就可以运用COM+,当然这也造成部署的不便利。ii. MSMQ消息队列,主要运用于异步处理。比如,在业务处理过程中要发一封邮件,假如采纳消息队列
14、来做,不管当前的邮件服务忙,还是根本就不能工作,用户可以转回来处理其它业务而不必等待。4.DataAccessTier数据访问层,是用来隔离系统访问不同的数据媒体或者系统外服务(比如,其它系统的WebService等)用的。将接口进行究竟or-MappingORMaPPing所带来的好处这里就不多说了。我们先来谈一下下面的几个概念。i. DomainModel&TableModule依据MartinFlower的定义DomainModel:Anobjectmodelofthedomainthatincorporatesbothbehavioranddata.- RichDomainModel:
15、是上面的这种定义- AnemicDomainModel:这种方式方法和Data是分别在不同的类里实现的,OR-Mapping就是建立在这种方式上的。ii. NHibernateNHibernate是OR-MaPPing的一种实现,是一个比较齐整的框架,是从JaVa的Hibernate转过来的。当然.Net下还有其它的OR-MaPPing实现,如Giii. SqIMapper&IBatis.NetSqIMapper为DOmainModel和TableModule两种方式一个折中方案,它可以以面对对象的方式干脆处理自定义数据实体对象,同时可以依据与数据源与业务实体的映射关系执行手写的Sql语句,这样完全使得我们可以针对详细数据源做优化,对于困难操作同样可以胜任。IBatis.Net是SqlMaPPer的实现。or-Mapping与困难查询的问题OR-MaPPirlg带来的好处是在CU,D方面还可以,终归大批量的删除一般不会常常出现,但是R方面就是一个实实在在的问题,面对困难查询的执行效率也是一个问题。蹩脚的解决方案是两条线,R这方面采纳TabIeMOdUie这种方式来,而CUD才用对象。5.Com