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开发框架之插件化应用模式升级,如需转载请自行联系原博主。

时间: 2024-10-24 09:16:46

WCF开发框架之插件化应用模式升级的相关文章

Winform开发框架之插件化应用框架实现

支持插件化应用的开发框架能给程序带来无穷的生命力,也是目前很多系统.程序追求的重要方向之一,插件化的模块,在遵循一定的接口标准的基础上,可以实现快速集成,也就是所谓的热插拔操作,可以无限对已经开发好系统进行扩展,而且不会影响已有的功能,不在需要的模块,通过修改配置移除即可.我的Winform开发框架一直以来,来源于多年的项目积累以及客户的反馈,已经具备了众多很好的特性以及相关的模块组合,为了更好拥抱变化,提高基于Winform开发框架基础上开发新系统的效率,以及为框架融入更多好的特性,故此把我的

eclipse可以做成插件化的模式,那么网站能不能也做成一种插件化的模式呢?

问题描述 既然Eclipse做成一种平台式的软件,那么做网站也应该可以做成一种平台式的网站.那这种思想怎么去实现呢?在网上是不是已经有网站实现了这种方式呢?如果有的话都是哪些网站呢? 解决方案 有的, 下面的文章有详细说明, 而且, 最后由一个googleCode上的linkTalk的开源实例项目. 具体商业化的网站有哪些基于这个技术, 就不清楚了.http://enterprisearchitecture.group.iteye.com/group/blog/50624

Android 插件化 动态升级

不少朋友私信问到这个问题,这里简单介绍下我的了解 1.作用 大多数朋友开始接触这个问题是因为 App 爆棚了,方法数超过了一个 Dex 最大方法数 65535 的上限,因而便有了插件化的概念,将一个 App 划分为多个插件(Apk 或相关格式) 常用的其他解决方法还包括:Google Multidex,用 H5 代替部分逻辑,删无用代码,买付费版的 Proguard 当插件化作用不止于此,还包括:(1) 模块解耦,(2) 动态升级,(3) 高效并行开发(编译速度更快) (4) 按需加载,内存占用

【我的Android进阶之旅】Android插件化开发学习资料

1.目前开源的插件开发框架大致有哪些? 1. 任玉刚 的 dynamic-load-apk Github 地址:https://github.com/singwhatiwanna/dynamic-load-apk 2.mmyydd 的 Direct-Load-apk Github 地址:https://github.com/mmyydd/Direct-Load-apk 3.limpoxe 的 Android-Plugin-Framework Github 地址:https://github.co

Discuz NT2.5应用“插件”化

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 7月16日,康盛创想(Comsenz)发布了基于ASP.net平台的社区软件Discuz!NT2.5 RC版.从官方获得的消息称,大约在10天左右的最后一次公测之后,Discuz!NT2.5正式版将于7月底正式对外发布.据悉,Discuz!NT2.5版本加入了辩论贴.悬赏帖.标签.我的附件.统计信息.交易帖等功能,并对模板引擎进行了优化. 随

WCF开发框架的案例应用总结

在我的<Winform开发框架>系列文章中,除了介绍Winform开发框架外,还详细介绍了基于Winform开发框架的WCF开发框架,WCF开发框架除了具有Winform程序的丰富体验,绚丽的界面外,还具备Web应用程序的分布式应用特点,数据库服务端配置而不用客户端操心等特点,而随着.NET4.0的出现,只有40多M的安装包,也确实为WCF应用的推广使用更加方便.由于WCF应用的分布式这个重要的特点,客户数据全部保存在服务端,因此也提高了数据的安全性,因此很多传统应用的场合都可以使用WCF技术

Winform开发之离线式WCF开发框架的实现介绍

在上篇随笔<Winform开发框架之框架演化>中介绍了几种Winform开发框架,其中有对于离线式WCF开发框架的介绍,离线式的WCF开发框架 ,就是结合了传统Winform开发框架的数据访问方式,又利用了WCF分布式数据获取的特点,使得数据可以离线使用,在一种业务要求集中化,又要求不影响正常业务操作的应用系统场景下比较适合.本文主要介绍如何利用我的Winform开发框架的整体思路,实现WCF开发框架的离线式的数据上传.更新的同步操作. 其实目前企业集中化管理,这种模式要求很多,如一些加盟店的

Android插件化原理解析——Hook机制之动态代理

转发必注明出处:Hook机制之动态代理 使用代理机制进行API Hook进而达到方法增强是框架的常用手段,比如J2EE框架Spring通过动态代理优雅地实现了AOP编程,极大地提升了Web开发效率:同样,插件框架也广泛使用了代理机制来增强系统API从而达到插件化的目的.本文将带你了解基于动态代理的Hook机制. 阅读本文之前,可以先clone一份 understand-plugin-framework,参考此项目的dynamic-proxy-hook模块.另外,插件框架原理解析系列文章见索引.

携程Android App的插件化和动态加载框架

携程Android App的插件化和动态加载框架已上线半年,经历了初期的探索和持续的打磨优化,新框架和工程配置经受住了生产实践的考验.本文将详细介绍Android平台插件式开发和动态加载技术的原理和实现细节,回顾携程Android App的架构演化过程,期望我们的经验能帮助到更多的Android工程师. 需求驱动 2014年,随着业务发展需要和携程无线部门的拆分,各业务产品模块归属到各业务BU,原有携程无线App开发团队被分为基础框架.酒店.机票.火车票等多个开发团队,从此携程App的开发和发布