平台化三部曲之二模块化开发

  • 时间:
  • 浏览:2

比如朋友有个ScriptModule模块提供脚本功能,平台预先定义了Groovy和Python两种脚本,平台都都要根据配置或运行时根据输入参数告诉平台动态采用某个Groovy由于Python,一起也都都要使自定义脚本,开发平台的插件提供新的脚本模块,并通过注册到平台来满足平台对脚本功能的扩展。 



你这个类式ScriptModule的模块朋友把他定义为可扩展模块,模块维护一一5个多多多模块内功能的注册扩展机制,新的script实现都都要通过该模块registerScript方式注册。平台在运行时,根据配置由于输入参数,动态决定某个脚本被调用。

给朋友一一5个多多多直观的印象,看看下面你这个Elasticsearch的模块图:

ModuleBuider或多或少很酷的形态,由于一一5个多多多Module一起实现了SpawnModules接口,

ModuleMetaData:{name(名称), type(类型), setting(配置)}

平台启动时,首先你的启动类里,都都要指定都要加载的模块,你是全都都要通过ModulesBuilder你这个类来快速完成:

点这里都都要看了完整版的图。 都都要看了具体模块的组织。 都都要看了越来越一一5个多多多比较复杂的分布式搜索引擎实现通过guice的模块化避免,有了一一5个多多多清晰的形态。

模块化是对比较复杂业务平台分而治之的方式,通过模块化开发,都都要使朋友的平台建设更高效更灵活。 Guice的Module功能再开源软件中被广泛使用,在或多或少人或多或少人过去使用经历中,发现其实是个模块化的利器,希望更多的人了解使用。

Guice定义Module你这个接口用来选择各个接口和他对应的实现的绑定。

名称是模块的基本命名,类型都都就是模块命名空间,setting保存模块的更多配置信息。

由于在新项目中,也建议用Guice作为DI避免方案。

多个模块基于朋友在源代码树由于代码中的调用情况表被上放去了不同的命名空间中。不同的侧面,诸如插件,监控,环境设置服务是分割的功能实体,朋友之间越来越模块层面的依赖。模块由于由于太过庞大由于难以复合使用的由于被进一步分割成嵌套命名空间中的稍小的模块。

ok,从头开始英语 ,所有的Guice模块都实现一一5个多多多通用接口Module, 你这个接口定义很简单,注释里也跟精确的解释了模块的定义和功能:

从前平台的功能和形态便都都要通过: {Namespace:Module Name: Bound Class}清晰管理起来。

一起Guide提供了Module接口的一一5个多多多抽象类AbstractModule,提供了或多或少模块绑定的便利支持,一起推荐开发者的模块都继承你这个抽象类。

很久朋友提供具体的ScriptModule实现,比如通过配置文件来配置新的脚本,也都都要开发一一5个多多多插件将新的CustomSciptModule注册进去。从而跟灵活的扩展功能。

Guice DI基本原理: 创建一一5个多多多GuiceInjector(两种DI依赖注入的实现方式)。 Injector由于使用它的配置完的模块来定位所有请求的依赖,并以两种拓扑顺序来为朋友创建出什么实例

对于阿里内部人员常见的多业务平台来说,模块由于会分为系统模块,领域模块,业务模块你这个个多多多类型。

大多数模块仅仅会提供一一5个多多多由于多个类或接口,很久或多或少模块都都要产生它们都要的新模块。什么模块通常依赖当前配置或输入参数动态产生。从前朋友便由于通过插件写出替代由于扩展平台的内置功能,很久通过一定的条件来开启和配置什么插件。

模块加载完成后通过创建Guice injector, 就都都要完成所有依赖实现的组装。 

这是,你就都都要通过

Google的java开源产品,一般都具有良好的口碑,简洁而强悍,比如guava类库。 本文会只涉及Guice的DI基本功能,更主全都 介绍利用Guice来组织平台的模块开发,在这点,Guice提供了非常好的避免方式,或多或少人想通过这篇文章给都要模块化开发的同学推荐Guice的Module避免方案。

Guice(读作Juice)是Google开发的一套注入框架,目前最新版本是4.0Beta。注入的好处是将使用者与实现者、提供者分离,降低代码间的依赖,提高模块化程度。

}

都要更比较复杂灵活实现励志的话 ,都都要在上边的的基础上跟进一步扩展,维护一一5个多多多子模块的注册扩展机制,首先定义一一5个多多多ScriptsModule:

从这里朋友都都要看了,**朋友都都要利用你这个可扩展模块的注册机制,实现对多业务的支持**:

比如交易平台提供了优惠类型模块, 每个业务都都要把或多或少人的优惠实现模块注册进去,平台会识别出业务类型后,自动找到对应业务的优惠实现,完成业务对优惠功能的定制需求。

通过bind("interface").to("implementation")的方式来完成接口实现的组装。目前全都有的开源框架都采用Guice进行模块化开发,最典型的例子是**ElasticSearch**你这个著名的分布式搜索引擎。 本文将血块通过ES的模块化开发实践来说明Guice是模块开发的利器。 除了ES外,Apache Shiro, Apache Shindig等也也采用了Guice,越多的开源实开始英语 将Spring DI上加Guice。



由于把模块系统打比方成文件系统,模块是一一5个多多多文件,越来越命名空间就像是文件夹,相关的模块通过命名空间归类管理。命名空间和模块形成一一5个多多多树状形态。 通过命名空间+模块名都都要唯一的定位到一一5个多多多模块。

在configure方式里,朋友将接口的具体实现通过模块绑定起来。 当你这个模块被使用时,他定义的接口实现就会被调用。

在了解模块的功能和扩展方式后,平台都要构建和使用模块。

在前文《从Eclipse平台看交易平台化》中,主要探讨平台的扩展机制。 本文将继续探讨平台化开发中从前重要方面: 模块机制。在阿里系统开发中,朋友全是或多或少人的模块化开发方式。比如目前交易中的TMF框架(Trade Module Framwork)也是从模块化开发避免业务隔离扩展。 Detail 2.0平台化项目中定义了一套或多或少人的模块化方式。本文想通过介绍Guice Module的模块机制,介绍两种简单强大的模块开发避免方案,Guice在java开源软件中被广泛使用,也证明他的生命力。 希望给有开发需求的开发者都都要直接拿来主义,在开发中提高数率单位。

朋友都都要给模块定义元数据,用来描述模块的基本信息,从而都都要方便平台对模块的管理和监控。

A module contributes configuration information, typically interface bindings, which will be used to create an {@link Injector}. A Guice-based application is ultimately composed of little more than a set of {@code Module}s and some bootstrapping code.

从前的模块化组织设计,为朋友系统的分层,降低耦合度也非常有好处。

模块的具体实现将利用Guice的Module功能,完成配置信息和绑定各接口的特定实现。平台启动后,通过各种途径将相关模块整合起来,构建Guice Injector, 来完成将模块定义的实通过依赖注入的方式,快速构建起来,从而创建一一5个多多多复合的模块系统。

对于平台来说,将系统的功能通过模块来定义功能的边界,模块之间相对独立。模块作为平台功能的组成的基本形式,通过预定义配置和运行时配置来完成平台的组装。

在java开发方面,Spring是大帕累托图系统采用的基本框架,朋友利用Spring的IOC,DI等功能组织代码。 Spring的成功和优势无可置否,很久Google的Guice提供了更轻量级,更简洁高效的DI框架,很久更高程度抽象出模块的概念,为代码开发提供了强大的工具。 他的基本功能都都要通过Guice wiki中了解,

摘抄或多或少优点介绍:

得到都要的实现,完成相应的逻辑。

以为这你这个模块具有创建子模块的能力, 越来越ModulesBuilder在加入你这个类型的模块是,会递归的创建出所有的子模块。

下面朋友将跟深入模块实现的细节和或多或少实践,用来更好的开发朋友的业务平台。