Skip to content

xiaoshicae/go-easy-extension

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Easy-Extension

Easy-Extension框架目标是提高复杂系统的扩展性,适用于系统有多个接入方,且不同接入方有定制化的扩展诉求。例如电商交易,履约等中台系统。

框架特点

  • 轻量易用
  • 可以实现业务逻辑和平台逻辑分离,提高提供扩展性和稳定性

框架解决的业务场景

框架使用Demo

package main

import (
	"context"
	ee "github.com/xiaoshicae/go-easy-extension"
)

// Extension 扩展点
type Extension interface {
	DoSomething()
}

func main() {
	register() // 注册业务和能力

	ctx := context.Background() // 请求上下文
	
	ctx = initSession(ctx) // 每次处理请求前,需要初始化session

	// 根据匹配到的业务,动态获取Extension的实现
	ext, err := ee.GetFirstMatchedExtension[Extension](ctx)
	if err != nil {
		panic(err)
	}
	
	res := ext.DoSomething() // 调用扩展点进行业务逻辑处理
	fmt.Println(res)
}

func register() {
	// 注册默认能力,为匹配到任何扩展点实现时,默认兜底实现
	_ = ee.RegisterDefaultAbility(ctx, &ability.DefaultAbility{})
	// 注册能力
	_ = ee.RegisterAbility(ctx, &ability.Ability1{})
	// 注册业务
	_ = ee.RegisterBusiness(ctx, &business.Business1{})
}

func initSession(ctx context.Contextxt) context.Contextxt {
	// 向你的ctx注入session,用于保存一起请求匹配的上下文信息
	// http rpc框架,逻辑可以放在middleware
	ctx = ee.NewCtxWithSession(ctx)

	// 每次请求都需要初始化session,MyParam用于业务和能力匹配
	// http rpc框架,逻辑可以放在middleware
	_ = ee.InitSession(ctx, param.MyParam{
		Name:  "business_1",
		Extra: "ability_1 & ability_2",
	})
	
	return ctx 
}

代码样例

  • 业务及能力扩展点实现情况

* 请求命中业务1时,扩展点实现情况

* 请求命中业务1时,扩展点运行分析

文档

请参考java版本的实现: wiki

License

Easy-Extension遵循Apache开源协议,具体内容请参考LICENSE文件。