这样的情况下,golang中如何设计中间业务层最好
业务需求:
ABCD十几种不同的业务他们有一项共同的复杂业务创建a
,他们在调用创建a业务
之前会组装自己的数据来传入创建a业务
,传入的数据结构都是一致的。在创建a
业务完成后,会生成对应的新的数据(结构也是一样),需再ABCD各自的不同业务处理(也可能不需处理直接结束)。
另外,ABCD可能会存在创建a
前要执行某些操作(根据传入创建a
的参数而定),完成之后要执行某些操作(也是根据生成的新数据的参数来定)。
type Hook struct {
BeforeCreate()
AfterCreate()
}
ABCD在调用公用a的时候,都会有一个他们自己的标识name string
带着传入进去。
目前方案:
在创建a业务,完成之后会进行 switch 判断,然后进行不同的操作。
switch Task.Name {
case "请假":
case "迟到":
case "缺勤":
}
以上的缺陷:
如果ABCD这样的业务不断新增,这个 switch 的判断会非常庞大,代码全都堆积到了一块。
能否有一种注册的方式。
type Hook struct {
Name string
Func func()
}
var newData NewData
var hooks []Hook
var currTaskName string
for _, h := range hooks {
if h.Name == currTaskName {
h.AfterCreate(newData)
}
}
// newData 是业务a完成之后,会生成一些新的数据,给业务ABCD各自写入他们自己对应表
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
公共业务A返回处理后的数据再次由各个其他服务调用,这样是否可以?