博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
构建插件式的应用程序框架(四)----服务容器
阅读量:6229 次
发布时间:2019-06-21

本文共 1278 字,大约阅读时间需要 4 分钟。

   在
一文中,可以看到我们的
IApplication
接口是派生于
IServiceContainer
接口的。为什么要派生于
IServiceContainer
呢?我们来看看
IServiceContainer
的定义,它有几个
AddService
方法和
RemoveService
方法以及从
IserviceProvider
继承过来的
GetService
方法。
Service
本身是
设计时架构的基础,
Service
提供设计时对象访问某项功能的方法实现,说起来还真拗口。就我看来,
ServiceContainer
机制的本质就是解耦合,就是将类型的设计时功能从类型本身剥离出来。如果你把类型的设计时功能也封装到类型里,这样的类型包含了很多只有开发人员才会用到而最终用户根本不需要的功能,使得类型既臃肿有不便于扩展。而将设计时功能剥离出来,这样类型就可以不依赖于特定的设计环境,之所以现在有这么多非官方的
设计环境可能就是这个原因吧。
       
我们的插件式的应用程序框架正好也需要这样一个松散的架构,我就移花接木把它应用到我们的框架中。
       ServiceContainer
提供的
IserviceContainer
的实现,如果没有特殊的需要我们不必扩展它,而是直接的利用它。在上一篇文章中我们在实现
IApplication
接口的时候就直接使用的
ServiceContainer
。我们在使用
Service
架构的时候,总是倾向于有一个根容器,各个
Service
容器构成了一个
Service
容器树,每一个节点的服务都可以一直向上传递,直到根部,而每一个节点请求
Service
的时候,我们总是可以从根节点获得。我把这个根节点比喻成一个服务中心,它汇总了所有可提供的服务,当某个对象要请求服务(
GetService
)只需要向根结点发送要获得的服务,根结点就可以把服务的对象传递给它。
       
从另外一个角度看,
ServiceContainer
为我们的插件是应用程序提供了有力的支持,利用
ServiceContainer
,你不但可以获得应用程序所提供的所有的功能,而且你还可以通过插件向应用程序添加
Service
,而你添加的
Service
又可以服务另外的
Service
,这样我们的应用程序框架就更加的灵活了。但是任何东西都是有两面性的,带来灵活的同时也为开发人员的工作增加了复杂度,所以使用
ServcieContianer
开发的应用程序必须提供足够详细的文档,否则开发人员可能根本不知道你到底有多少
Service
可以用,因为很多的
Service
是通过插件提供的,可能应用程序的作者都不会知道程序发布以后会出现多少
Service
       
写了这么多,可能接触过
ServiceContainer
的朋友已经觉得罗唆了,没接触过的还是觉得说得莫明其妙。有空接着写,我会创建几个简单的服务演练演练,增强一下感性认识,呵呵。
本文转自纶巾客博客园博客,原文链接:XXXXXXXX,如需转载请自行联系原作者
你可能感兴趣的文章
Sr_C++_Engineer_(LBS_Engine@Global Map Dept.)
查看>>
非监督学习算法:异常检测
查看>>
jquery的checkbox,radio,select等方法总结
查看>>
Linux coredump
查看>>
Ubuntu 10.04安装水晶(Mercury)无线网卡驱动
查看>>
我的友情链接
查看>>
nginx在reload时候报错invalid PID number
查看>>
ElasticSearch 2 (32) - 信息聚合系列之范围限定
查看>>
VS2010远程调试C#程序
查看>>
[MicroPython]TurniBit开发板DIY自动窗帘模拟系统
查看>>
Python3.4 12306 2015年3月验证码识别
查看>>
从Handler.post(Runnable r)再一次梳理Android的消息机制(以及handler的内存泄露)
查看>>
windows查看端口占用
查看>>
Yii用ajax实现无刷新检索更新CListView数据
查看>>
JDBC的事务
查看>>
Io流的概述
查看>>
App 卸载记录
查看>>
JavaScript变量和作用域
查看>>
开源SIP服务器加密软件NethidPro升级
查看>>
作业:实现简单的shell sed替换功能和修改haproxy配置文件
查看>>