WCF开发框架之插件化应用模式升级
自从在《Winform开发框架之插件化应用框架实现》一文中,介绍并总结了Winform开发框架插件化应用框架的实现后,赢得了很多同行和客户的支持,于是把我的WCF开发框架、混合式开发框架都进行了升级,把它们都提升到插件化应用的高度上。本文主要介绍WCF开发框架,如何实现插件化的应用。从我随笔《基于我的Winform开发框架扩展而成的WCF开发框架》介绍可以看到,一般的WCF应用,是在客户端添加服务应用的方式,然后使用自动生成的WCF服务客户端代理来访问相应的服务的,这种方式比较方便快捷,但是也增加了客户端界面和WCF服务的耦合性,架构布局如下所示。
为了更好有效利用松耦合的特点,以及插件化应用的特点,我对整个WCF开发框架进行了一个大的调整,以便更好整合及利用好的特点。如下图所示,插件化应用框架的启动模块,它除了依赖基础服务模块中(包括权限管理模块和字典模块),其他的模块如WCF服务模块、主业务插件模块A(主业务模块B)等都是通过配置方式实现对接的,他们之间没有明显的耦合关系。
整个项目工程的布局如下所示,其中BaseUIDx为基础界面类,方便各个插件模块重用而分离出来的。其他模块的功能如上图所示。
主业务插件模块是指各种各种的插件化业务模块,他们本身包含有界面部分、WCF服务调用、以及业务逻辑等内容。
为了更好分离WCF服务的部署和WCF服务逻辑(这也是最佳实践),实现更好的代码控制和重用,WCF项目的架构关系设置成如下所示。
其中WHC.WareHouseMis.WCFLibrary是整个WCF服务的业务逻辑模块,它囊括了统一调用接口Facade层、WCF业务实现WCFLibrary层、BLL业务层、数据接口IDAL层、数据访问实现DAL层、实体类Entity层。
当然,以上的关系不需要手工来做这些繁琐的代码对应关系,只需要设计好表后,使用代码生成工具Database2Sharp一键生成就可以了,其中很多项目关系已经生成好了,增量开发的时候,重新引用下文件关系即可。
而且整个WCF不在使用在界面层直接引用WCF服务的方式,而采用了自定义的客户端信道(允许从自定义的配置文件中加载)方式实现对应WCF服务客户端代理类的创建。
以WCF的调用类ItemDetailCaller为例,使用代码生成工具生成的代码,它已经继承了某个接口IItemDetailService服务基类了,并给它指定了具体的WCF服务节点即可,如下代码所示。
public class ItemDetailCaller : BaseService<ItemDetailInfo>, IItemDetailService { public ItemDetailCaller() : base() { this.endpointConfigurationName = EndPointConfig.ItemDetailService; }
实现接口IItemDetailService的函数很有规律,使用下面类似的代码即可。
public List<ItemDetailInfo> FindByBigType(string bigType) { List<ItemDetailInfo> result = new List<ItemDetailInfo>(); IItemDetailService service = CreateSubClient(); ICommunicationObject comm = service as ICommunicationObject; comm.Using(client => { result = service.FindByBigType(bigType); }); return result; }
这样进行了包装后,我们使用WCF服务就好像之前的Winform开发框架使用BLLFactory的方式一样了,WCF服务调用示例代码如下所示。
bool succeed = CallerFactory<IItemDetailService>.Instance.Update(info, info.ID.ToString()); if (succeed) { try { StockInfo stockInfo = CallerFactory<IStockService>.Instance.FindByItemNo2(this.txtItemNo.Text, this.txtBelongWareHouse.Tag.ToString()); if (stockInfo != null) { stockInfo.WareHouse = txtBelongWareHouse.Text; CallerFactory<IStockService>.Instance.Update(stockInfo, stockInfo.ID.ToString()); } //不管是更新还是新增,如果对应的备件编码在库房没有初始化,初始化之 bool isInit = CallerFactory<IStockService>.Instance.CheckIsInitedWareHouse(this.txtBelongWareHouse.Text, this.txtItemNo.Text); if (!isInit) { CallerFactory<IStockService>.Instance.InitStockQuantity(info, 0, this.txtBelongWareHouse.Text); } } catch (Exception ex) { MessageDxUtil.ShowTips(string.Format("初始化库存为0失败:", ex.Message)); } return true; }
本文转自博客园伍华聪的博客,原文链接:WCF开发框架之插件化应用模式升级,如需转载请自行联系原博主。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
代码生成工具Database2Sharp功能功能完善及更新
好久没有更新代码生成工具了,因为很多功能基本上能够应付日常的开发工作了,如C#代码生成、数据库文档导出、Sql脚本生成,但用户在使用过程中也发现了一些需要完善的地方,因此继续完善,以求更加实用方便。 现更新了下面几个问题,希望给大家做软件开发的时候有一个启示。 1. 所有的模板支持C#2.0的架构,方便转换为高版本的VS格式。 虽然现在很多时候用VS2008来做开发了,但是我们一般来说还是基于C#2.0来进行开发;本次更新考虑有些用户可能还是使用VS2005的开发工具,因此只做了基于VS2005的项目工程文件,VS2008也可直接打开,转换正常。 2.完善修改表的别名和字段别名功能。 这个功能原来就有的,只是对于表很多,字段很多,超出屏幕的范围没有进行很好的控制,因此导致一些显示的问题,本版本采用了TableLayoutPanel来进行动态的伸缩,再多的内容,都可以通过滚动条进行控制了,呵呵。 3. 软件界面修改成了XP样式的了 其实VS2005及后续版本进行开发的软件本来就支持XP样式的,我人为的去掉了,只保留VS2003的那种样式。设置成XP样式也很简单的,Main函数启动的...
- 下一篇
Database2Sharp2009 代码生成工具
NHibernate、Castle-ActiveRecord和PetShop架构的C#代码生成工具 Database2Sharp 文件大小: 5655KB 更新时间: 2009-5-7 下载地址: http://www.iqidi.com/Download/Database2SharpSetup.rar 在线帮助: 2009-5-7修改:增加企业级别的界面自动生成,集成在Enterprise Library架构中,并更新EditControl、SearchControl和分页控件的Web界面层控件,并修正一些小问题。版本升级为5.0 2009-2-10修改:更新EditControl和SearchControl这两个Web界面层控件,并修正一些小问题。 2009-1-5修改:增加Java框架(Ibatis+Spring+struts+Extjs)代码的生成;添加Java实体类快速生成。 2008-12-28修正:修正对SQL Server 2005部分数据库显示有问题的错误。完善Enterprise Library代码生成。 产品说明如下: 软件功能 深田之星Database...
相关文章
文章评论
共有0条评论来说两句吧...