自从在《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, , this.txtBelongWareHouse.Text);
}
}
catch (Exception ex)
{
MessageDxUtil.ShowTips(string.Format("初始化库存为0失败:", ex.Message));
} return true;
}

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

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

    支持插件化应用的开发框架能给程序带来无穷的生命力,也是目前很多系统.程序追求的重要方向之一,插件化的模块,在遵循一定的接口标准的基础上,可以实现快速集成,也就是所谓的热插拔操作,可以无限对已经开发好系 ...

  2. fusionjs uber开源的通用web插件化开发框架

    fusionjs uber开源的web 插件化开发框架 核心特性: 基于插件的开发,依赖注入开发 开箱即用的服务器端渲染,构建结果拆分,模块热加载 Tree-shaking 支持 集成的插件 redu ...

  3. Android 插件化 动态升级

    最新内容请见原文:Android 插件化 动态升级 不少朋友私信以及 Android开源交流几个 QQ 群 中都问到这个问题,这里简单介绍下 1.作用 大多数朋友开始接触这个问题是因为 App 爆棚了 ...

  4. 在WPF中使用Caliburn.Micro搭建MEF插件化开发框架

    原文:在WPF中使用Caliburn.Micro搭建MEF插件化开发框架 版权声明:原创内容转载必须注明出处,否则追究相关责任. https://blog.csdn.net/qq_36663276/a ...

  5. Apache DolphinScheduler 2.0.1 来了,备受期待的一键升级、插件化终于实现

    ✎ 编 者 按:好消息!Apache DolphinScheduler 2.0.1 版本正式发布! 本版本中,DolphinScheduler 经历了一场微内核+插件化的架构改进,70% 的代码被重构 ...

  6. TinyFrame升级之八:实现简易插件化开发

    本章主要讲解如何为框架新增插件化开发功能. 在.net 4.0中,我们可以在Application开始之前,通过PreApplicationStartMethod方法加载所需要的任何东西.那么今天我们 ...

  7. 罗列几个Android插件化开发框架

    携程插件化框架 ACDD插件化框架 360插件化框架 Android-Plugin-Framework DL APK动态加载框架 部分框架对比 DynamicLoadApk 迁移成本很重:需要使用『t ...

  8. RN学习1——前奏,app插件化和热更新的探索

    react_native_banner-min.png React Native(以下简称RN)有大量前端开发者的追捧.前端开发是一个活跃的社区,一直尝试着一统前后端,做一个全栈开发,RN就是他们在客 ...

  9. iOS 插件化开发汇总 Small框架

    应用插件化背景 目前很多应用功能越来越多,软件显得越来越臃肿.因此插件化就成了很多软件发展的必经之路,比如支付宝这种平台级别的软件: 页上密密麻麻的功能,而且还在增多,照这个趋势发展下去,软件包的大小 ...

随机推荐

  1. AWVS漏洞测试-02节-添加一个简单的新闻系统

    实现一个简单的新闻发布系统 有登录 注册 添加新闻 浏览新闻 评论新闻 新闻列表 这些基本功能 使用asp.net webform 首先是登录页 protected void Button1_Clic ...

  2. centos7 Linux 安装mysql

    安装过程如: http://blog.csdn.net/tengdazhang770960436/article/details/18361979 中间过程出现无法安装mysql-server 解决方 ...

  3. Android View绘制原理分析

    推荐两篇分析view绘制原理比较好的文章,感谢作者的分享. <Android应用层View绘制流程与源码分析> <View 绘制流程>

  4. pod 出错备忘

    pod install #输出信息 /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems ...

  5. Clappr——开源的Web视频播放器

    巴西著名的门户网站Globo.com(视频播放器),使用的是基于OSMF的Flash组件.在最近几年的发展过程中,Globo为视频平台陆续添加了不少额外功能,例如: 字幕,广告,画中画播放等.然而,由 ...

  6. 【Xamarin报错】 COMPILETODALVIK : UNEXPECTED TOP-LEVEL error java.lang.OutOfMemoryError: Java heap space

    Xamarin Android 编译报错: COMPILETODALVIK : UNEXPECTED TOP-LEVEL error java.lang.OutOfMemoryError: Java ...

  7. php报错: PHP Warning: PHP Startup: memcache: Unable to initialize module

    在mac上通过brew 安装php的memcache扩展(brew install php56-memcache)后运行 ~  php -mPHP Warning:  PHP Startup: mem ...

  8. 十家国内知名的EDM服务提供商

    国内的EDM服务商多若繁星.下面博主为大家介绍十家国内知名的EDM服务提供商. 一.Webpower 威勃庞尔. 官方网站是:www.webpower.asia.作为全球领先的邮件营销解决方案提供商, ...

  9. 科谱,如何单机环境下合理的备份mssql2008数据库

    前言: 终于盼来了公司的自用服务器:1U.至强CPU 1.8G 4核.16G内存.500G硬盘 X 2 (RAID1);装了64位win2008,和64位mssql2008.仔细把玩了一天把新老业务系 ...

  10. TNS-12541: TNS: 无监听程序 TNS-12560: TNS: 协议适配器错误 TNS-00511: 无监听程序

    文章转自:http://www.luocs.com/archives/464.html 此文版权归作者 – yaogang所有,转载请注明yaogang©www.luocs.com. Luocs说:这 ...