.

.

开发者文档

ioc-golang 全面拥抱可扩展性,我们希望您在框架内接触到的任何概念都是可横向扩展的。可扩展性不意味着任何事情都要手动编写,而是在拥有足够预置实现方案的基础之上,支持针对特殊场景的定制化。如果您的方案足够通用,也可以提交至开源侧,让更多人可以享受你的方案带来的便利。

ioc-golang 的可扩展性体现在多个方面,其中最重要的是依赖注入过程的可扩展性,这也是框架能的核心能力。

依赖注入 的可扩展性

包含三个维度,从具体到抽象分别是:

  • 对象的可扩展性

    对象的可扩展性,即针对确定的一个结构(非单例),你可以通过传入不同的参数来获取多个期望的对象。这个过程往往被结构使用者关注,他需要思考如何传入参数,获得对象,调用对象从而实现正确的业务逻辑。通过这一可扩展性,结构使用者可以扩展出多个对象实例。

  • 结构的可扩展性

    结构的可扩展性,即针对一个确定的 自动装载模型,你可以通过定义自己的结构描述信息,将你的结构体注册在框架上,以供使用。这个过程是结构提供者关心的,他需要思考选用哪个自动装载模型,思考提供的结构的全部生命周期信息。通过这一可扩展性,结构提供者可以为框架注入多种多样的结构,这些结构都会按照被选择的自动装载模型执行加载逻辑。

    框架提供了一些预置的结构,例如 redis 客户端、gorm客户端等等,开发者可以直接传入参数,注入或通过API获取,直接使用,但这些预置的结构一定无法覆盖业务需求的。开发者注册自己的任何结构到框架上,都是使用了结构的可扩展性,这些被注册的结构和框架提供的预置结构,都是同一层面的概念。

  • 自动装载模型 的可扩展性

    自动装载模型描述了一类结构的装载方式,例如是否单例模型、参数从哪里加载、注入标签应该符合什么格式等等。这个过程也是结构提供者关心的。

    框架提供了一些预置的自动装载模型,例如单例模型、多例模型、配置模型、rpc 模型等,开发者可以根据按照业务需要,将一个或多个结构注册在期望的自动装载模型上,当已有的自动装载模型不足以适配业务场景,开发者可以调用API进行定制化

AOP 实现 的可扩展性

1 - 项目结构

IOC-golang 框架项目结构
  • aop: 结构代理 AOP 模块:提供 AOP 代理层的基础能力,和可扩展API。
  • autowire: 提供依赖注入内核,以及单例模型、多例模型两种基本自动装载模型
  • config: 配置加载模块,负责解析框架配置文件。
  • extension: 组件扩展:提供基于多个领域模型的的预置实现结构,比如缓存、数据库、消息。
  • example: 示例
  • iocli: 代码生成/程序调试 工具

2 - 注册自定义结构

使用 IOC-golang 框架注册自定义结构

参考内置的结构实现 Redisextension/state/redis

3 - 自定义 AOP 实现

自定义基于 IOC-golang 框架的 AOP 实现

参考内置的 AOP 实现 monitorextension/aop/monitor

4 - 自定义自动装载模型

基于 IOC-golang 框架开发自定义自动装载模型

参考内置的自动装载模型实现 grpc 客户端自动装载模型 extension/autowire/grpc