您好,欢迎访问三七文档
Websharp介绍孙亚民PartI简介一个项目的三个工程系统框架工程——纯技术业务工程测试工程软件设计的目标稳定可维护可扩展可升级有利于团队开发设计的原则高内聚和低耦合内聚和耦合,包含了横向和纵向横向的内聚和耦合,通常体现在系统的各个模块、类之间的关系纵向的耦合,体现在系统的各个层次之间的关系评判标准系统的内聚和耦合度层次的清晰和简洁性易于实现性可升级和可扩充性开发效率是否有利于团队合作开发性能Websharp的关注点数据库访问O/R映射AOP分布式访问://://典型的三层应用系统数据库层用户界面层应用服务层应用服务数据库用户界面应用服务层的设计对于应用服务层来说,需要处理以下几个方面的问题:数据的表示方式数据,是软件处理的对象。从某种程度上来说,“软件,就是数据结构加算法”的说法,是有一定意义的。在面向对象的系统中,数据是用类来表示的,代表了现实世界实体对象在软件系统中的抽象。考虑所谓的MVC模式,这个部分的类属于M——实体类的范畴。由于应用软件通常会使用数据库,数据库中的数据,可以看成是对象的持久化保存。由于数据库一般是关系型的,因此,这个部分,还需要考虑类同关系型数据的映射,即通常所说的O-RMAP问题。数据的存取方式如同上述所说,软件系统处理的实体对象数据需要持久化保存数据库中,因此,我们必须处理系统同数据库的交互,以及数据的存取和转换方式的问题。业务逻辑的组织方式在面向对象的系统中,业务逻辑表现为对象之间的交互。有了上述的实体对象,以及对象的保存策略,就可以将这些对象组合起来,编写我们的业务逻辑处理程序。在业务逻辑的处理中,必须保证处理的正确性和完整性,这将会涉及到事务处理。通常,我们也会把业务逻辑封装成组件的形式,以得到最大的可重用性。应用服务层的设计业务服务的提供方式在我们完成系统的功能后,如何向客户提供服务,是我们需要考虑的问题。这里的客户,不仅仅是指软件的使用者,也包括调用的界面、其他程序等。例如,在一个基于Web的ASP.Net或JSP系统中,业务逻辑功能的客户便是这些ASP.Net页面或JSP页面。业务逻辑组件应该通过什么方式,直接的,或间接的,向这些客户提供服务?层的部署和层间交互对于一个多层的应用软件系统来说,尤其是大型的应用软件系统,通常需要把不同的部分部署在不同的逻辑或物理设备上。特别是一些基于Web的应用软件系统,其部署工作将涉及到Web服务器、组件服务器、数据库服务器等不同的服务设备。在进行应用软件架构的设计的时候,必须考虑各种不同的部署方案。完整的结构图ClientWebServerWebWinformWinformApplicationServerDBDBSystemnConfigurationDataAccess(WebsharpData)Entity(O/RM)(WebsharpORM)BusinessRule(WebsharpAOP)BusinessFacadeServiceLocatorServiceLocatorExternalSystem剪裁和取舍剪裁的必要数据实体层和实体控制层无法裁减如果系统没有复杂的业务逻辑,而只是一些数据的操作,或者业务逻辑特别少,那么,可以省略业务逻辑层,而将相关的功能移至实体控制层。如果不考虑多种客户端的情况,也不考虑分布式部署的问题,系统的模块又很少,不会产生模块间紧耦合的情况,那么,可以不使用业务外观层,而让用户界面程序直接访问业务功能。IofficeDemo演示IofficeDemo项目数据库WebService业务逻辑Websharp框架WebServer浏览器WinFormPartIIWebsharp的数据库访问层Websharp的数据库访问层基于ADO.Net进行再封装,以简化ADO.Net的使用数据访问的主要接口是DataAccessDataAccessAbstractDataAccessMSSqlDataAccessOracleDataAccessOleDbDataAccessDataAccess接口的定义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,其他任何方式通过框架来执行能够节省开发成本在这个部分,以下两个部分的类会显得特别重要:对象——关系映射的分析类,能够通过既定的方案完成对象——关系的映射,确定数据存取方案数据库操纵类:根据映射关系,将数据准确的存储到数据库中,并且封装不同数据库之间的差异。过程客户程序数据存取访问接口O-R分析类数据库访问类请求存储对象请求分析映射关系返回分析结果请求保存数据保存实例在J2EE中的CMPJDO中的PersistenceManagerCustomercustomer=newCustomer(……);PersistenceManagerPM=PMFactory.initialize(……);Pm.persist(customer);Websharp的PersistenceManagerpublicboolAddSchdule(Schduleschdule){PersistenceManagerpm=PersistenceManagerFactory.Instance().CreatePersistenceManager();try{pm.PersistNewObject(schdule);returntrue;}catch{returnfalse;}f
本文标题:一个项目的三个工程
链接地址:https://www.777doc.com/doc-762108 .html