




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
NET 插件系统框架设计(一)在应用程序开发过程中,存在很多模块重复开发的烦恼,于是收集资料开始动手,设计开发这插件系统框架,框架用于整合各个子插件。设计阶段一:将接口定义成单独程序集,让插件去实现这个接口,框架采用反射来完成子插件功能的读取。问题:1. 要定义若干接口。2. 对于现在已存的模块修改太大。设计阶段二:着力于对第一阶段第二个问题解决,在协议接口和插件间添加一个适配器,有了这样的结构,就能将现有已存在模块方便地与主机框架整合设计阶段三:在阶段二的启发下,解决在阶段一中的要事先定义若定义接口的问题。改进,在接口协议与主机框架间加适器,让接口协议义与主机开发断开问题:插件与协议,主机-协议藕合较大。适配器操作麻烦。阶段四:框架完善:在阶段三的基本上,插件及主机本身实现也预定义接口(视图),通过这一框架设计,主机系统及插件可以互不干扰地开发(为方便后期整合,插件及主机开发均定义成接口),开发完成后只需要添加一个接口协议及两人适配器就完成了主机与插件整合。插件获取主程序数据解决方案分组项目名称说明ContractCodemarks.Framework.Plugin.Contract程序集间协议AddIn SideCodemarks.Framework.Plugin.View.User插件功能接口定义AddIn SideCodemarks.Framework.Plugin.Adapter.User插件类适配器AddIn SideCodemarks.Framework.Plugin.AddIn.User用户插件类具体实现AddIn SideCodemarks.Framework.Plugin.Addin.Model主机操作实现类Host SideCodemarks.Framework.Plugin.Host.View.User主机功能接口定义Host SideCodemarks.Framework.Plugin.Host.Adapter.User主机协议适配器Host SideCodemarks.Framework.Plugin.Host.User用户插件类具体实现Host SideCodemarks.Framework.Plugin.Host.Model用户插件实体()在这个插件框架中,主要解决的问题为主机与插件相互通信,比如在日志插件中会验证用户是否有发表权限,日志插件并不会直去访问用户中心插件,而是向主机请求(如图),而主机在接受到请求后会调用用户中心插件,完成日志插件所请求的功能。在插件与主机的数据通信中主要有两和上操作:1. 主机获取插件数据:如日志中请求用户请求用户权限数据。2. 插件获取主机数据,如日志插件请求用户数据,主机将会通过反射创建用户对象返回供日志插件用。主机插件关系图日志插件请求用户数据项目分析:Contract项目:事先定义插件与主机交互协议,定义接口IUserContract IUserInfo(实体类) 两个接口,IUserContract 继承于IContract 预留接口(负责插件程序生命周期及权限相关接口)IUsercontract 接口定义方法添加用户方法Bool AddUser(IUserInfo userInfo) IUserInfoGetUserInfoByName(string userName);AddIn Sider结构插件程序只需实现协议中所定义的方法,这样就能适现主机与插件的通信,为了方便后期整合,插件系统本身的功能我们先定义接口,1 2 3 项目并没有跟协义没有关系。1AddIn SideCodemarks.Framework.Plugin.View.User用户插件功能接口定义2AddIn SideCodemarks.Framework.Plugin.AddIn.User用户插件类具体实现3AddIn SideCodemarks.Framework.Plugin.Addin.Model主机操作实现类4AddIn SideCodemarks.Framework.Plugin.Adapter.User插件类适配器/插件中的自定义实体类/插件中UserView插件中功能接口/用户件中UserView接口具体实现以上代码为独立代码与接口协议没有关系/适配器实现接口协议IUserContract 中的AddUser(IUserInfo) 与GetUserInfoByName();在主机请求添加用户时会传入一个IUserInfo 接口,而在用户插件需求参数为CustomUserInfo 参数类型不同,在GetUserInfoByName(string userName) 返回值为ICustomUserInfo ,我们在适配器类中实现CustomUserInfo 到UserInfo 转换 及UserInfo到CustomUserInfo 转换public interface UserViewCustomUserInfo GetUserInfoByName(string userName);int AddUser(CustomUserInfo userInfo);/插件实现类转化为协议类定义CustomUserInfoToContractAdapter实现接口协议IUserInfo接口定义 private CustomUserInfo addIn;通过构程函数进行赋值,在Name get 属性时返回addIn.Name;Set 方法同理/ / 从自定义实体转为协议/ internal class CustomUserInfoToContractAdapter : IUserInfoprivate CustomUserInfo addIn;public CustomUserInfoToContractAdapter(CustomUserInfo customUserInfo)this.addIn = customUserInfo;#region IUserInfo 成员public string Name getreturn addIn.Name;Set其它属性#endregion/插件实现类转化为协议类定义ContractTCustomUserInfoAdapter继承于插件实体类CustomUserInfo,定义 private IUserInfo contract;通过构造函数进行contract 赋值,在Name get 属性时return contract.Name;internal class ContractToCuntomUserInfoAdapter : CustomUserInfoprivate IUserInfo contract;public ContractToCuntomUserInfoAdapter(IUserInfo iuserInfo)this.contract = iuserInfo;#region CumtomUserInfo Memberpublic override string Nameget return contract.Name; set base.Name = value; /UserInfoAdapter实体类适配器/ / 协议与插件实体类互转适配器集合/ public class UserInfoAdapterspublic static IUserInfo ContractToAddIn(CustomUserInfo customUserInfo)return new CustomUserInfoToContractAdapter(customUserInfo); /调用转换类public static CustomUserInfo AddInToContract(IUserInfo iuserInfo)return new ContractToCuntomUserInfoAdapter(iuserInfo);/UserAdapter类public class UserAdapter : IUserContractprivate cn.CodeMarks.Framework.Plugin.View.UserView view = null;public UserAdapter()this.view = new UserAddIn();public UserAdapter(UserView userView)this.view = userView;/创建插件具体实现#region IUserContract 成员/ / 根据用户名返回用户对象/ / / public cn.CodeMarks.Framework.Plugin.Contract.Entity.IUserInfo GetUserInfoByName(string userName)通过用户名查用户对象CustomUserInfo 转换为IUserInfo 接
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度绿色建筑幕墙劳务分包工程合同范本
- 2025东航大客户航空安全培训服务合同
- 肩关节运动康复新策略-洞察及研究
- 2025年新型防盗门窗产品销售代理协议
- 2025年度第三方保密协议与数据传输安全规范模板
- 2025年度地暖垫层施工质量保证与售后服务承包合同范本
- 2025版蔬菜种植基地土地流转承包合同
- 2025版食品添加剂研发委托生产合作协议
- 2025年新能源设备采购合同补充协议范本
- 2025年度山地草场使用权流转合同
- 放射科质控汇报
- 眼科学教学课件:绪论
- GB/T 31091-2014煤场管理通用技术要求
- GB/T 24218.1-2009纺织品非织造布试验方法第1部分:单位面积质量的测定
- 万东GFS型高频高压发生装置维修手册
- 公寓de全人物攻略本为个人爱好而制成如需转载注明信息
- 企业经营沙盘模拟实训指导书
- 汉密尔顿抑郁量表17项
- 《现代物流管理》第一章-导论(课用)
- 智能制造生产线运营与维护课件完整版
- 树木清障专项施工方案
评论
0/150
提交评论