版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Websharp介绍孙亚民PartI
简介一个项目的三个工程系统框架工程——纯技术业务工程测试工程软件设计的目标稳定可维护可扩展可升级有利于团队开发设计的原则
高内聚和低耦合内聚和耦合,包含了横向和纵向横向的内聚和耦合,通常体现在系统的各个模块、类之间的关系纵向的耦合,体现在系统的各个层次之间的关系评判标准
系统的内聚和耦合度层次的清晰和简洁性易于实现性可升级和可扩充性开发效率是否有利于团队合作开发性能Websharp的关注点典型的三层应用系统数据库层用户界面层应用服务层应用服务数据库用户界面应用服务层的设计对于应用服务层来说,需要处理以下几个方面的问题:
数据的表示方式 数据,是软件处理的对象。从某种程度上来说,“软件,就是数据结构加算法”的说法,是有一定意义的。在面向对象的系统中,数据是用类来表示的,代表了现实世界实体对象在软件系统中的抽象。考虑所谓的MVC模式,这个部分的类属于M——实体类的范畴。由于应用软件通常会使用数据库,数据库中的数据,可以看成是对象的持久化保存。由于数据库一般是关系型的,因此,这个部分,还需要考虑类同关系型数据的映射,即通常所说的O-RMAP问题。数据的存取方式 如同上述所说,软件系统处理的实体对象数据需要持久化保存数据库中,因此,我们必须处理系统同数据库的交互,以及数据的存取和转换方式的问题。业务逻辑的组织方式 在面向对象的系统中,业务逻辑表现为对象之间的交互。有了上述的实体对象,以及对象的保存策略,就可以将这些对象组合起来,编写我们的业务逻辑处理程序。在业务逻辑的处理中,必须保证处理的正确性和完整性,这将会涉及到事务处理。通常,我们也会把业务逻辑封装成组件的形式,以得到最大的可重用性。应用服务层的设计业务服务的提供方式 在我们完成系统的功能后,如何向客户提供服务,是我们需要考虑的问题。这里的客户,不仅仅是指软件的使用者,也包括调用的界面、其他程序等。例如,在一个基于Web的ASP.Net或JSP系统中,业务逻辑功能的客户便是这些ASP.Net页面或JSP页面。业务逻辑组件应该通过什么方式,直接的,或间接的,向这些客户提供服务?层的部署和层间交互 对于一个多层的应用软件系统来说,尤其是大型的应用软件系统,通常需要把不同的部分部署在不同的逻辑或物理设备上。特别是一些基于Web的应用软件系统,其部署工作将涉及到Web服务器、组件服务器、数据库服务器等不同的服务设备。在进行应用软件架构的设计的时候,必须考虑各种不同的部署方案。完整的的结构构图剪裁和和取舍舍剪裁的的必要要数据实实体层层和实实体控控制层层无法法裁减减如果系系统没没有复复杂的的业务务逻辑辑,而而只是是一些些数据据的操操作,,或者者业务务逻辑辑特别别少,,那么么,可可以省省略业业务逻逻辑层层,而而将相相关的的功能能移至至实体体控制制层。。如果不不考虑虑多种种客户户端的的情况况,也也不考考虑分分布式式部署署的问问题,,系统统的模模块又又很少少,不不会产产生模模块间间紧耦耦合的的情况况,那那么,,可以以不使使用业业务外外观层层,而而让用用户界界面程程序直直接访访问业业务功功能。。IofficeDemo演示IofficeDemo项项目数据库WebService业务逻辑Websharp框架WebServer浏览器WinFormPartIIWebsharp的的数据据库访访问层层Websharp的的数据据库访访问层层基于ADO.Net进行再再封装装,以以简化化ADO.Net的的使用用数据访访问的的主要要接口口是DataAccessDataAccess接接口的的定义义publicinterfaceDataAccess{#regionExecuteNonQueryintExecuteNonQuery(CommandTypecommandType,stringcommandText);......#endregionExecuteNonQuery#regionExecuteDataSetDataSetExecuteDataset(CommandTypecommandType,stringcommandText);DataSetExecuteDataset(stringcommandText);......#endregionExecuteDataSet#regionExecuteReaderIDataReaderExecuteReader(CommandTypecommandType,stringcommandText);......#endregionExecuteReader#regionExecuteScalarobjectExecuteScalar(CommandTypecommandType,stringcommandText);......#endregionExecuteScalar#regionExecuteXmlReaderXmlReaderExecuteXmlReader(CommandTypecommandType,stringcommandText);......#endregionExecuteXmlReader}DataAccess的的使用用DataAccessdao=DataAccessFactory.CreateDataAccess(databaseProperty);db.Open();IntI=db.ExecuteNonQuery(………);//db.需要要的操操作db.Close();PartIIIWebsharpORM数据实实体的的表示示应用软软件系系统,,从本本质上上来说说,是是计算算机对对现实实世界界的模模拟。。现实实世界界中的的实体体对象象,在在软件件系统统中,,表现现为需需要处处理的的数据据。在在面向向对象象的系系统中中,这这是通通过““类””和““对象象”来来表示示的。。参考著名的的“MVC”模式,,类可以分分成实体类类(M)、、控制类((C)、和和边界类((V),分分别代表了了实体对象象、控制和和界面显示示。系统中中需要处理理的数据,,在面向对对象的系统统中,属于于实体类部部分。在考虑数据据实体层的的设计策略略的时候,,我们需要要把握以下下要点:一致的数据据表示方式式。在一个个系统中,,数据的表表示方式必必须尽可能能统一,同同时,在处处理单个数数据和多个个数据的时时候,处理理方式尽可可能一致。。因为数据通通常是需要要存储到数数据库中,,因此,良良好的映射射方法是必必需的。处理好对象象的粒度,,即所谓的的粗粒度对对象、细粒粒度对象。。一般例子一个仓库中中的产品((Product))publicclassProduct{publicstringName;//名名称publicdecimalPrice;//价格publicintCount;//数数量}可以按照如如下方法使使用Product类:Productp=newProduct();//……处处理Product一般例子一张入库单单可以使用用如下定义义:publicclassForm{publicstringID;//入库单单编号publicDateTimeAddTime;//入入库时间publicFormDetail[]FormDetails;//入入库单明细细}publicclassFormDetail{publicProductInProduct;//入库产产品publicintCount;//入库数量量}对象集合的的表示方法法数组表示的的方法,也也可以使用用容器来,,需要一个个类型转换换的操作ObjectCollection方方法。这个个方法同上上面的方法法类似,不不同之处在在于,为每每个实体类类设计一个个Collection类。。例如,可可以为FormDetail设计一个个FormDetailsCollection类(C#):publicclassFormDetailsCollection:ArrayList{publicvoidAdd(FormDetaildetail){base.Add(detail);}publicnewFormDetailthis[intnIndex]{get{return(FormDetail)base[nIndex];}}}数据集的表表示方法。。采用这种方方法,通常常是直接把把从数据库库查询中获获取的数据据集作为数数据处理对对象J2EE的的方法EntityBeanBMPCMP使用XML来映射数数据库JDO的方方法提供了一个个相对“轻轻量级”的的方案采用一般的的做法,编编写实体类类通过一些强强化器对这这些类进行行强化,以以使其符合合JDO的的规范通过PersistenceManager来来实现对象象的持久化化储存Websharp的的方法EntityData类通过Attribute或XML配置置文件的方方式同数据据库映射IPersistenceCapable接口口和PersistenceCapable抽抽象类[TableMap("Schdule","GUID")][WebsharpEntityInclude(typeof(Schdule))]publicabstractclassSchdule:PersistenceCapable{[ColumnMap("GUID",DbType.String,"")]publicabstractstringGUID{get;set;}[ColumnMap("UserID",DbType.String,"")]publicabstractstringUserID{get;set;}[ColumnMap("StartTime",DbType.DateTime)]publicabstractDateTimeStartTime{get;set;}[ColumnMap("EndTime",DbType.DateTime)]publicabstractDateTimeEndTime{get;set;}[ColumnMap("Title",DbType.String,"")]publicabstractstringTitle{get;set;}……}实体对象的的获取Schduleschdule=EntityManager.CreateObject(typeof(Schdule))asSchdule;数据的存取取目的是持久久化保存对对象存取的对象象,可以是是数据库、、普通文件件、XML,其他任任何方式通过框架来来执行能够够节省开发发成本在这个部分分,以下两两个部分的的类会显得得特别重要要:对象——关关系映射的的分析类,,能够通过过既定的方方案完成对对象——关关系的映射射,确定数数据存取方方案数据库操纵纵类:根据据映射关系系,将数据据准确的存存储到数据据库中,并并且封装不不同数据库库之间的差差异。过程实例在J2EE中的CMPJDO中的的PersistenceManagerCustomercustomer=newCustomer(………);PersistenceManagerPM=PMFactory.initialize(………);Pm.persist(customer);Websharp的PersistenceManagerpublicboolAddSchdule(Schduleschdule){PersistenceManagerpm=PersistenceManagerFactory.Instance().CreatePersistenceManager();try{pm.PersistNewObject(schdule);returntrue;}catch{returnfalse;}finally{pm.Close();}}事务处理理和Transaction接口PersistenceManagerpm=PersistenceManagerFactory.Instance().CreatePersistenceManager();Transactiontrans=pm.CurrentTransaction;trans.Begin();try{pm.PersistNewObject(schdule);trans.Commit();returntrue;}catch{trans.Rollback();returnfalse;}finally{pm.Close();}业务逻辑辑的处理理业务逻辑辑表现为为对象之之间的交交互基本上没没有办法法提供统统一的模模式但是,采采用基本本一致的的策略是是非常必必要的在业务逻逻辑处理理中,处处理的应应该是对对象,而而不是直直接同数数据库打打交道事务的处处理基于数据据库连接接的事务务专用的事事务处理理服务::J2EE的容容器,COM+Websharp的Transaction接口口publicboolAddSchdule(Schduleschdule,string[]otherPeoples){if(!CheckSchdule(schdule))returnfalse;PersistenceManagerpm=PersistenceManagerFactory.Instance().CreatePersistenceManager();Transactiontrans=pm.CurrentTransaction;trans.Begin();try{pm.PersistNewObject(schdule);foreach(stringotherPeopleinotherPeoples){Schdules=EntityManager.CreateObject(typeof(Schdule))asSchdule;s.GUID=Guid.NewGuid().ToString();s.UserID=otherPeople;s.StartTime=schdule.StartTime;s.EndTime=schdule.StartTime;s.Title=schdule.Title;s.Description=schdule.Description;s.RemidTime=schdule.RemidTime;s.AddTime=DateTime.Now;s.Status=0;pm.PersistNewObject(s);}trans.Commit();returntrue;}catch{trans.Rollback();returnfalse;}finally{pm.Close();}}业务外观观层隔离系统统功能的的提供者者和使用用者作为后台台逻辑处处理和前前端用户户界面的的缓冲区区将用户界界面和系系统业务务逻辑处处理分开开,当业业务逻辑辑发生变变化时,,不用修修改客户户端程序序使同一个个业务逻逻辑能够够处理不不同的客客户端请请求。例例如,可可以将Facade设设计成WebService作为系统统不同模模块之间间的调用用接口::Facade设计模模式有利于项项目团队队的分工工协作。。业务外观观层的代代码框架架,在系系统分析析和设计计完成后后就可以以完成,,相当于于在界面面设计人人员和逻逻辑设计计人员之之间签订订了一个个协议虽然没有有实现任任何逻辑辑,但使使系统的的开发更更加有条条理,更更加简明明“任何问问题,都都可以通通过引入入一个中中间层来来得到简简化”。。DemoIofficePartIV
WebsharpAOP系统的横横向结构构和AOP使用AOP技术术的情景景Authentication权权限Caching缓存存Contextpassing内内容传传递Errorhandling错错误处理理Lazyloading懒懒加载载Debugging调调试试logging,tracing,profilingandmonitoring记记录跟跟踪优优化校校准Performanceoptimization性性能优优化Persistence持持久化化Resourcepooling资源源池Synchronization同同步Transactions事事务使用WebsharpAOP实现现松散耦合通过Case说明权限校验定义义publicclassSecurity{publicboolCheckRight(UsercurrentUser,ModelaccessModel,OperationTypeoperation){……//校验验权限}}调用场景publicclassBusinessClass{publicvoidBusinessMethod(){Securitys=newSecurity();if(!s.CheckRight(………)){return;}……//执行行业务逻辑}}问题点不清晰的业务务逻辑:从某某种意义上来来说,权限校校验过程并不不是业务逻辑辑执行的一部部分,这个工工作是属于系系统的,但是是,在这种情情况下,我们们不得不把系系统的权限校校验过程和业业务逻辑执行行过程掺杂在在一起,造成成代码的混乱乱。代码浪费:使使用这种方法法,我们必须须所有的业务务逻辑代码中中用Security类类,使得同样样校验的代码码充斥在整个个软件中,显显然不是很好好的现象。紧耦合:使用用这种方法,,我们必须在在业务逻辑代代码中显式引引用Security类类,这就造成成了业务逻辑辑代码同Security类的紧耦耦合,这意味味着,当Security发生变化化时,例如,,当系统进化化时,需要对对CheckRight的方法进行行改动时,可可能会影响到到所有引用代代码。下面所所有的问题都都是因此而来来。不易扩展:在在这里,我们们只是在业务务逻辑中添加加了权限校验验,哪一天,,当我们需要要添加额外的的功能,例如如日志记录功功能的时候,,我们不得不不同样在所有有的业务逻辑辑代码中添加加这个功能。。不灵活:有的的时候,由于于某些特定的的需要,我们们需要暂时禁禁止,或者添添加某项功能能,采用传统统的如上述的的做法,我们们不得不采用用修改源代码码的方式来实实现。Business类的改改进[AspectManaged(true)]publicclassBusinessClass:AspectObject{publicvoidBusinessMethod(){……//执行行业务逻辑}}……//执行行业务逻辑为系统增加一一个SecurityAspectpublicclassSecurityAspect:IAspect{publicvoidExecute(object[]paramList){if(!Security.CheckRight(......)){thrownewSecurityException("你没没有权限!");}}}配置信息<Websharp.Aspects><Aspecttype="MyAPP.SecurityAspect,MyAPP"deploy-model="Singleton"pointcut-type="Method“action-position="before"match="*,*"/></Websharp.Aspects>WebsharpAOP的实现原原理Proxy模模式publicclassAspectProxy:RealProxy在WebsharpAspect中中,当一个对对象被标记为为AspectManaged后,,这个类的实实例的创建过过程,以及方方法的调用会会被WebsharpAspect控制。因此此,当你在调调用如下语句句:BusinessClassbc=newBusinessClass();的时候,你得得到的实际上上并不是BusinessClass类的一个个实例,而是是他的一个代代理。因此,,当调用这个个“实例”的的方法的时候候,所有的调调用都会被代代理所捕获PartV
WebsharpServiceLocator远程过程调用用技术多种远程过程程调用技术::WebService.NetRemotingCorbaJavaRemoting有多少种服务务器端技术,,就有多少种种客户端访问问技术为什么没有一一种统一的方方式?基于接口的编编程基于服务的架架构WSL的目标标提供一个一致致的服务访问问编程模型开发人员只需需要定义服务务访问接口,,就可以使用用一致的方式式透明的访问问这些服务,,而不用理会会这些服务之之间的不同点点。框架会自动动生成访问问远程服务务需要的代代理。只有一个需需要打交道道的接口publicabstractclassServiceLocator{publicstaticobjectFindService(stringserviceName,TypeclientInterface)}如何使用WebsharpServiceLocator定义一个同同你需要访访问的服务务一致的接接口(当然然,如果你你的服务是是实现某个个接口的,,可以直接接使用该接接口)。接接口的方法法名和参数数必须同服服务类的方方法名和参参数一致。。如果你的的方法名和和服务的方方法名不一一致,那么么,可以使使用ServiceMethodNameAttribute来来指明服务务的方法名名。在配置文件件按中注册册你需要访访问的服务务。调用ServiceLocator的的FindService方法.调用接口的的方法。HelloWorld的LocalAssembly例子创建一个名名为“EnterpriseClient”的的windowsconsole项项目,加加入Websharp.dll的引用用。添加一个类类,名为““HelloWorld”,,然后添添加一个名名为“GetHello”的的方法,代代码如下::publicclassHelloWorld{ publicstringGetHello(stringhello){returnhello;}}添加一个名名为“IHelloWorld”的的接口publicinterfaceIHelloWorld{stringGetHello(stringhello);[ServiceMethodName("GetHello")]stringGetHello2(stringhello);}配置文件<Servicename="HelloWorld"service- type="LocalAssembly"deploy-model="SSingleton"type="EnterpriseClient.HelloWorld,EnterpriseClient"/>调用代码publicstaticvoidMain(string[]args){IHelloWorldhello=ServiceLocator.FindService("HelloWorld",typeof(IHelloWorld))asIHelloWorld;Console.WriteLine(hello.GetHello("HelloWorld"));Console.WriteLine(hello.GetHello2("Helloagain"));Console.ReadLine();}运行结果HelloWorld的的WebService例子子添加一个接接口“IHello”publicinterfaceIHello{stringHelloWorld();}配置文件调用方法publicstaticvoid
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公务员行测资料分析试卷及分析
- 营养师注册营养基础题库及答案
- 铜匠铜器錾刻题目及分析
- 机械工程金属工艺试题及解析
- 年产1万吨棉秆皮纤维水刺无纺布生产项目可行性研究报告模板立项申批备案
- 新生儿体温异常的护理
- 银行零售业务综合营销活动方案
- 防毒口罩打包采购合同
- 2026年3D打印珠宝的企业合作模式创新与实践
- 2026年心理咨询师远程咨询服务协议
- 2025年双碳目标实现路径探索项目可行性研究报告及总结分析
- 印尼语基础日常交流口语教程
- 军事科技:量子点材料在特殊装备中的应用案例
- 医学超级全医学影像学第版泌尿系统教案
- 基于子空间动态模式分解的电力系统机电振荡模态精准提取方法研究
- 保险销售培训课件
- (正式版)DB44∕T 2720-2025 《高速公路养护作业交通组织管理技术规范》
- 房顶生命线安装施工方案
- 社区工作总结汇报个人
- 帮妈妈做家务课件
- 2025上半年软考数据库系统工程师下午真题及答案解析
评论
0/150
提交评论