小需求从ifelse屎山堆积到优雅的代码

今天我接到了一个业务需求,要求扩展现有功能完成某个字段下发。(随手记一下吧)

情况大概是这样的:

- 有某个商品类目新增俩个字段,分别是尺码和长度。

- 下发这字段会分几种场景

- 尺码和长度可能为空

- 尺码和长度为空的情况下下发的字符串内容不同

这算是一个比较简单的需求吧。

可以通过

if scene == 1{

if size "" && length ""{

}else if .....

}else if scene == 2{

}

可以明显感受到这种堆砌ifelse的代码非常恶心。

来看看怎么优化它?

  1. 考虑到这是某一个商品类目的需求,后续可能其他类目也可能会迭代类似的需求那就可以考虑用工厂方法模式

首先定义一个interface

// 工厂接口
type PopSizeInfoBuilder interface {
    Build() (content string) // content为下发的字符串内容
}
// 定义一个具体的struct
type xxxFactory struct{}
// 具体工厂
func Newxxx(ctx *context.context) *xxxFactory {
    return &ShoesPopSizeInfo{scene: ctx.ModuleFnsData.SizeDeviationScene}
}
// 创建对象
func (xx *xxFactory) CreateBuilder(ctx *context.context)  {
    return Newxxx(ctx)
}
//最后实现工厂接口
func (xx *xxFactory) Build() (content string){
	switch:
	case:
	// 具体逻辑
}

//最后在业务层函数调用

func xxxbiz(){
		// ....前面的逻辑
		if rid == xxxrid{
		  x := CreateBuilder
		  content := x.Build
		}
		//通过判断rid来下发content为后续业务实现扩展,而不必一直堆砌屎山
		// ...后面的逻辑

}



#牛客创作赏金赛#
全部评论
啊?为什么不用策略模式。工厂模式在这用有点炫技了吧。
点赞 回复 分享
发布于 07-08 22:15 北京

相关推荐

社会教会你的第一课
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务