在
构建插件式的应用程序框架(二)----订立契约一文中,可以看到我们的IApplication接口是派生于IServiceContainer接口的。为什么要派生于IServiceContainer呢?我们来看看IServiceContainer的定义,它有几个AddService方法和RemoveService方法以及从IserviceProvider继承过来的GetService方法。Service本身是.NET设计时架构的基础,Service提供设计时对象访问某项功能的方法实现,说起来还真拗口。就我看来,ServiceContainer机制的本质就是解耦合,就是将类型的设计时功能从类型本身剥离出来。如果你把类型的设计时功能也封装到类型里,这样的类型包含了很多只有开发人员才会用到而最终用户根本不需要的功能,使得类型既臃肿有不便于扩展。而将设计时功能剥离出来,这样类型就可以不依赖于特定的设计环境,之所以现在有这么多非官方的.NET设计环境可能就是这个原因吧。
我们的插件式的应用程序框架正好也需要这样一个松散的架构,我就移花接木把它应用到我们的框架中。
ServiceContainer是.NET提供的IserviceContainer的实现,如果没有特殊的需要我们不必扩展它,而是直接的利用它。在上一篇文章中我们在实现IApplication接口的时候就直接使用的ServiceContainer。我们在使用Service架构的时候,总是倾向于有一个根容器,各个Service容器构成了一个Service容器树,每一个节点的服务都可以一直向上传递,直到根部,而每一个节点请求Service的时候,我们总是可以从根节点获得。我把这个根节点比喻成一个服务中心,它汇总了所有可提供的服务,当某个对象要请求服务(GetService)只需要向根结点发送要获得的服务,根结点就可以把服务的对象传递给它。
从另外一个角度看,ServiceContainer为我们的插件是应用程序提供了有力的支持,利用ServiceContainer,你不但可以获得应用程序所提供的所有的功能,而且你还可以通过插件向应用程序添加Service,而你添加的Service又可以服务另外的Service,这样我们的应用程序框架就更加的灵活了。但是任何东西都是有两面性的,带来灵活的同时也为开发人员的工作增加了复杂度,所以使用ServcieContianer开发的应用程序必须提供足够详细的文档,否则开发人员可能根本不知道你到底有多少Service可以用,因为很多的Service是通过插件提供的,可能应用程序的作者都不会知道程序发布以后会出现多少Service。
写了这么多,可能接触过ServiceContainer的朋友已经觉得罗唆了,没接触过的还是觉得说得莫明其妙。有空接着写,我会创建几个简单的服务演练演练,增强一下感性认识,呵呵。
分享到:
相关推荐
Spring框架是 Java 平台的一个开源的全栈(Full-stack)应用程序框架和控制反转容器实现,一般被直接称为 Spring。该框架的一些核心功能理论上可用于任何 Java 应用,但 Spring 还为基于Java企业版平台构建的 Web ...
如今的Java Web开发对于需求来说已经变得过于复杂。当今众多Java领域的Web开发框架不仅使用复杂,而且并没有很好的遵循Don’t Repeat Yourself(DRY)原则...这篇文档会向你介绍如何使用Grails框架来搭建Web应用程序。
关系映射(ORM)层称为Groovy Server Pages (GSP)的表现层技术基于Spring MVC的控制器层构建于Gant 上的命令行脚本运行环境内置Jetty服务器,不用重新启动服务器就可以进行重新加载利用内置的Spring 容器实现依赖注入...
Redux 是 JavaScript 应用程序的可预测状态容器。 (不要与 WordPress 框架 – Redux 框架混淆)它可以帮助您编写行为一致、在不同环境(客户端、服务器和本机)中运行且易于测试的应用程序。 最重要的是,它提供了...
-框架和库:Spring框架、Spring MVC、MyBatis等用于构建应用程序的后端和数据访问层 项目背景:随着电子商务的快速发展和消费者对在线购物的需求不断增加,超市和零售店铺也需要适应这一变化。传统的超市和零售业务...
如今的Java Web开发对于需求来说已经变得过于复杂。当今众多Java领域的Web开发框架不仅使用复杂,而且并没有很好的遵循Don’t Repeat Yourself(DRY)原则...这篇文档会向你介绍如何使用Grails框架来搭建Web应用程序。
Redux是JavaScript应用程序的可预测状态容器。 (不要与WordPress框架– 相混淆) 它可以帮助您编写性能一致,在不同环境(客户端,服务器和本机)中运行且易于测试的应用程序。 最重要的是,它提供了出色的开发...
借助Elite Container和Ioc思想,你可以更轻易地构建出具有松散耦合、重用度高的应用程序。它的核心思想就是拆分功能的接口和实现,上层只依赖于下层的接口,然后通过Elite Container的配置,把不同的实现类注入到该...
一个框架,用于构建无服务器服务,传统服务器端应用程序,微服务和小程序。 描述 Midway是一个Node.js框架,用于构建无服务器服务,传统的服务器端应用程序,微服务和小型程序,它是由typescript编写的,它使用IoC...
Github收藏夹 这是个收藏夹,收集了... gRPC 使客户端和服务器应用程序可以透明地进行通信,并简化了连接系统的构建 Tars - 腾讯出品的高性能 RPC 框架 sofa-rpc - 蚂蚁金服出品的高可扩展性、高性能、生产级的 Java
单点登录, SSM框架公共模块 ├── zheng-admin -- 后台管理模板 ├── zheng-ui -- 前台thymeleaf模板[端口:1000] ├── zheng-config -- 配置中心[端口:1001] ├── zheng-upms -- 用户权限管理系统 | ├── ...
它的设计目标是通过大量默认配置来简化Spring应用程序的开发过程,从而让开发人员能够更快速地构建应用程序。 Spring Boot基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化...
关系映射(ORM)层称为Groovy Server Pages (GSP)的表现层技术基于Spring MVC的控制器层构建于Gant 上的命令行脚本运行环境内置Jetty服务器,不用重新启动服务器就可以进行重新加载利用内置的Spring 容器实现依赖注入...
001构建单体应用 002微服务解决复杂问题 003微服务的优点 004微服务的缺点 第2章 Linux使用 005Linux 简介 006Linux 与 Windows 比较 007安装 Linux 008Linux 远程控制管理 009Linux 目录结构 010操作文件目录 ...
001构建单体应用 002微服务解决复杂问题 003微服务的优点 004微服务的缺点 第2章 Linux使用 005Linux 简介 006Linux 与 Windows 比较 007安装 Linux 008Linux 远程控制管理 009Linux 目录结构 010...
基于ArcEngine的中间件(简称JLKEngine)采用...此外,还设计了基于Service架构的服务器容器,提供了通用的插件命令池容器,使得应用系统开发人员只需要少量代码,并利用已有的命令和工具插件可快速构建起一个应用系统。
应用程序中的服务。 具有权限指定等行政服务和新闻文章拉取、点赞等用户服务的基本操作。 这是我理解和学习 java spring-boot 和 web 应用程序开发的尝试。 为了构建这个程序,我参考了macroZhang的非常有教育意义的...
Fossul通过构建一个真正的模块化插件框架解决了这些难题,在该框架中,每个工作流功能都在插件内部执行。 像其他任何高级备份和恢复一样,备份和恢复始终是相同的过程(静默或转储数据,备份,取消静默,归档等)。...
Spring是一个开源的Java框架,用于构建企业级应用程序。它提供了一个灵活的、模块化的架构,支持各种功能,如数据访问、事务管理、安全性等。 SpringMVC是一个基于Spring框架的Web框架,它提供了基于Model-View-...
它的核心设计目标是提供一个简单的交互接口给开发者,开发者可以在此基础上灵活的构建自己的应用程序。无论是应用类程序还是框架类工具Hasor都会给予最有力的支持。 区别于其他框架的是Hasor拥有自己一套完整的扩展...