项目案例
应用开发基础框架 TeleFramework
1、背景及需求
  公司自主研发了一套使用于快速开发的应用开发基础框架TeleFramework,该框架以项目开发的过程中的经验积累、技术沉淀为基础,从项目中来,到项目中去,并为适应日新月异的新技术不断升级完善。目前TeleFramework V2.1版,能够很好的支持.net Framework 2.0,并支持多种数据库(SQL Server,Oracle,OLE DB)。应用开发基础框架TeleFramework以微软企业库2006为基础,使用了Microsoft.Practices.EnterpriseLibrary.Caching、Microsoft.Practices.EnterpriseLibrary.Common、Microsoft.Practices.ObjectBuilder程序集。应用开发基础框架TeleFramework对于缓存的管理管理,基于微软企业库2006中的Microsoft.Practices.EnterpriseLibrary.Caching程序集中提供CacheManager类方法。程序员使用CacheFactory.GetCacheManager获得缺省的缓存管理器,也可以将缓存管理器的名称作为参数以获得指定名称的缓存管理器。缓存管理器提供增加条目、获得条目以及删除条目的方法,在增加条目时,可指定条目的到期方式以及到期时的回调函数,程序员可以通过设定到期回调函数来接管缓存中内容的刷新控制。缓存大小、缓存轮询周期以及其他参数可在配置文件中进行设定。注意,在分布式多层应用中,缓存可以分别独立地用在支持.Net Framwork 2.0的任何场地上,只需在使用的场地上分别进行相应地配置即可。
2、系统构成
业务逻辑基类(Telegnosis.Framework.Base):
  提供业务逻辑类(由代码生成工具生成)的处理基类,主要包括 业务数据传输基类(BaseDto):实现页面数据与对象之间的数据传输 业务数据处理基类(BaseProc):对业务逻辑处理中的异常时间进行了定义 业务数据模型基类(BaseOrm):实现对象与关系数据单表之间的映射 业务数据访问基类(SqlBaseDao):实现了与数据库间数据交互的相关方法,包括创建数据连接、单条数据插入、单条数据更新、单条数据删除等方法,支持事务处理。
数据访问类(Telegnosis.Framework.DataAccess):
  提供业务逻辑向数据库端所提交命令的执行功能,使用工厂模式,调用帮助类SecurityHelper的数据操作方法,实现数据的提交(支持事务模式)。
系统配置类(Telegnosis.Framework.Configuration):
  TeleFramework框架2.1框架的所有配置集中存放在应用程序配置文件(App.Config或Web.Config)中,由系统配置类完成框架配置文件解析的功能,由帮助类ConfigHelper提供读取各种配置的方法,主要包括 使用GetDataSource获得数据源配置 使用GetExceptionSettings及GetException获得异常配置 使用GetMessageStringSettings及GetMessageString获得消息字符串配置 使用GetLogSettings及GetLogItem获得日志配置 使用GetSecuritySettings及GetSecurityItem获得安全配置
系统常量类(Telegnosis.Framework.Constants):
  定义了应用程序配置文件中各个配置节的名称常量(数据源配置节、异常信息配置、消息字符串配置、日志配置节、安全配置节、应用配置节),以及框架中枚举类型(异常类别、日志枚举类、记录编辑状态枚举)
异常处理类(Telegnosis.Framework.Exception):
  对框架中的异常进行封装,其中帮助类ExceptionHelper封装了异常处理的方法入口。
日 志 类(Telegnosis.Framework.Logging):
  在TeleFramework框架中,在数据库表Tele_FrameLogs中记录系统日志。日志类的业务逻辑处理类,由代码生成工具生成,实现对数据库表的访问。其中帮助类LogHelper封装了新增日志的方法入口,应用程序可以通过调用这些方法实现 。
权限认证类(Telegnosis.Framework.Security):
  完成框架认证授权的大部分功能,其中帮助类SecurityHelper封装了认证授权的方法入口,应用程序可以通过调用这些方法实现应用系统的认证授权功能。
认证:
  SecurityHelper.Authenticate方法完成基本的用户的认证功能,应用程序把用户名和口令作为参数传入,框架将之与数据库中的用户名和口令进行比对,比对一致后生成UserToken对象并缓存到框架中,然后将字符串类型的令牌返回给应用程序;应用程序在获得令牌后进行用户环境建立,这样就完成了基本的认证工作,应用程序可以在随后的授权控制中通过令牌来获得访问许可。 业务层的业务逻辑处理(即Proc)都是至少需要经过认证的,是否需要授权访问则可以由应用设计者来决定。实现的方法是,Proc的基类由原先的BaseProc改为SecurityBaseProc,在基类SecurityBaseProc的构造函数中加入了认证校验过程,当有访问请求传来时,框架首先从上下文调用环境(CallContext)中获得UI层传递来的FlowBox,并从FlowBox中获得用户在认证时获得的字符串令牌,然后校验该令牌是否存在于框架的令牌池(TokenPool)中,如果存在则认为该访问的用户是被认证过的,接着根据应用设计者的设定来判断是否需要进行进一步的授权校验。 在用户登出系统时,应用需要调用Logoff方法来告诉框架将令牌池中相应的用户令牌进行销毁,在物理上分离的多层应用中,框架会对长时间未使用的用户令牌进行超时销毁,类似于Web应用服务器的会话超时。超时可在配置文件中进行设置。 在编程时需要明确的是,通过SecurityHelper.Authenticate获得字符串令牌与框架在令牌池中建立的用户令牌(UserToken)是两个不同的对象,字符串令牌只是用户令牌的键索引,用户令牌中则维持了用户的角色、组织机构以及曾授权访问过的资源代码等复杂数据,一般情况下用户令牌只在框架中使用。 授权 授权包含两方面的功能,其一是权限的分配,即将特定资源的访问权限授予特定的对象(比如角色、组织以及用户等),并分配用户的角色及所属组织等,这部分工作可以使用已有的TelePass来完成,也可以根据应用需要进行自定义。 授权的另一方面功能就是权限验证即访问控制,主要使用SecurityHelper.Authorize方法来完成,参数有两个:前面认证过程中获得的字符串令牌及需要验证的资源代码。框架根据传递进来的字符串令牌获得令牌池中的用户令牌(UserToken),从用户令牌中得到该用户的角色、组织及曾经被授权访问过的资源代码,如果需要验证的资源代码曾经被授权访问过则框架不会再次进行进一步验证,否则框架根据用户的角色、组织及用户本身到系统缓存的资源访问控制列表中查找是否被许可访问指定的资源。 在我们的框架体系中,资源主要被定义为三大类:菜单、页面、页内资源(比如按钮),其中菜单资源、页面资源的授权访问可以在应用的基类中完成,业内资源及特殊的功能性资源则需要程序员来编码调用SecurityHelper.Authorize完成。对于Proc中的授权访问校验与页面比较类似,对于整个Proc的访问控制可以同样在基类(SecurityBaseProc)中完成,但Proc中某个方法的访问控制则需要程序员编码调用SecurityHelper.Authorize实现。 对于菜单资源,框架提供MenuHelper.GetAuthorizedMenu方法来为应用程序提供当前用户被许可访问的菜单结构,参数为字符串令牌。
框架工具类(Telegnosis.Framework.Util):
  完成对调用上下文(CallContext)对象漂流箱FlowBox的封装,提供对分布式程序域的支持。 在TeleFramework框架中,前端(比如UI客户端)环境参数可以通过框架传递到后端的多个服务器上的应用服务中,而这种传递的过程对框架中的应用来说是完全透明的。漂流箱FlowBox就是这些环境参数的载体,前端应用在启动时,框架将它放置在.Net提供的该应用的调用上下文(CallContext)中,程序员在应用中可以通过FlowBox.GetFlowBox来获得与应用实例相关的FlowBox,并将某些环境参数放置其中;当发生方法调用时,FlowBox随CallContext流到被调用的方法中,被调用的方法就可以获得FlowBox中的数据。CallContext可以进行本地跨程序域流动,也可以在分布式程序域中(即多层应用间)流动。 当需要在分布式程序域中流动时,CallContext中的对象必须是可序列化并且继承了某些指定接口,漂流箱FlowBox就是这种对象,其属性包括应用标识名、UI用户、客户端地址、经认证的令牌等。 应用开发基础框架TeleFramework主要包含以下工具类,从而为项目开发团队将用户需求转换为最终的产品提供规范、快捷的支持 代码生成工具(Telegnosis.Util.CodeGen.Windows): 代码生成工具启动命令被集成到Visual Studio的解决方案资源窗口的右键菜单中,使用这种方式启动后,代码生成工具可以自动获得命名空间以及上次配置时记录的数据库连接字符串,生成后的代码自动被加到选定的项目中。 代码生成工具生成以下文件,Model类,Proc类,Dao类,Dto类,其中Dao类与Dto类由工具生成后,不需程序员改动其中的代码,当数据表结构发生变更时,重新生成即可。Model类中可由程序员按照实际需要定业属性,对用户界面的显示提供支持;Proc类中提供GetList、AddModel、ModifyModel、RemoveModel等对记录操作的基本方法,程序员须在Proc中自行添加复杂业务逻辑的处理代码,以满足实际需要。
用户UI基类(Telegnosis.Framework.UI.Util):
  对框架中的异常进行封装,其中帮助类ExceptionHelper封装了异常处理的方法入口。
用户UI基类(Telegnosis.Framework.UI.Util):
  完成对页面基类的封装。继承自该基类的页面需经过授权认证,方能为用户访问;同时,提供对页面控件(Tag属性)的解析,完成数据提交时的完整性校验。 用户UI配置工具(Telegnosis.Framework.UI.UIAddIn): 用户UI工具启动命令被集成到Visual Studio的解决方案窗体的右键菜单中,对由用户UI基类Telegnosis.Framework.UI.Util.BasePage继承的窗体,提供对页面控件的数据绑定,所设置的数据绑定写入控件的Tag属性,最终被页面解析,如下图 其中,红色标记的控件说明未设置相应的Tag属性,未与数据表字段所对应的属性进行数据绑定。 在Telegnosis.Framework.UI.Util.BasePage基类中,定义了LoadValue、SetValue的方法,完成数据对象属性与页面控件值之间的数据转换与存储。 文档库用户控件(Telegnosis.Util.DocLib.Windows): 文档库用户控件中自定义了两个用户控件:单文档管理控件、多文档管理控件。为程序员提供了方便、快捷的文档管理(查看、上传、下载)功能的开发,提高了程序员的代码开发效率,规范了文档管理的功能开发。此外,所上传的文档使用文档库进行管理,提高了文档访问的安全性。
用户UI基类(Telegnosis.Framework.UI.Util):
  对框架中的异常进行封装,其中帮助类ExceptionHelper封装了异常处理的方法入口。
用户UI配置工具(Telegnosis.Framework.UI.UIAddIn):
  用户UI工具启动命令被集成到Visual Studio的解决方案窗体的右键菜单中,对由用户UI基类Telegnosis.Framework.UI.Util.BasePage继承的窗体,提供对页面控件的数据绑定,所设置的数据绑定写入控件的Tag属性,最终被页面解析,如下图 其中,红色标记的控件说明未设置相应的Tag属性,未与数据表字段所对应的属性进行数据绑定。 在Telegnosis.Framework.UI.Util.BasePage基类中,定义了LoadValue、SetValue的方法,完成数据对象属性与页面控件值之间的数据转换与存储。
文档库用户控件(Telegnosis.Util.DocLib.Windows):
  文档库用户控件中自定义了两个用户控件:单文档管理控件、多文档管理控件。为程序员提供了方便、快捷的文档管理(查看、上传、下载)功能的开发,提高了程序员的代码开发效率,规范了文档管理的功能开发。此外,所上传的文档使用文档库进行管理,提高了文档访问的安全性。
版权所有 2008 上海届远信息技术有限公司        沪ICP备17042872号
CopyRight©2008 Shanghai Telegnosis Information Technology L.td.