小需求从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 北京

相关推荐

这一周十分痛苦,天天被催着考央国企......情况如下,本人是专升本学历,去年考公没考上,今年考了烟草、石油、铁路,其他国企网申的都没过,我了解的国企里面计算机岗位是比较吃学历的。现在我是十分不想看行测了,这一周家里看我几个月了还没找到工作就催着我去考央国企,我说这是想考就考的吗?银行科技岗不要我,汽车的it岗也进不去啊。家里:你考考别的呗,去某顿机构,老师会交你啊,什么央国企的信息啊,简历啊,面试啥都跟你弄好了,你只管学行测,申论就行了呗。我:那他有跟你说报什么样的国企吗?国企的子公司的子公司也算国企,那这也算吗?家里人:反正国企稳定就行,别管啥子公司的,也别管啥岗位?我:那我去某瑞的流水线也算进国企了,那我去不去?家里:去啊,到时候干久了能轮岗啊我:谁跟你说能轮的?流水线能轮到it部门去?什么年代的事情了?家里:反正他稳定啊我:两班倒家里:稳定我:你认为私企到底咋样的?家里:不稳定,易裁员,福利不如国企好。天天吃外卖,没有食堂。我:外企勒家里:不稳定啊,你又进不去我:嗯嗯,对。进不去........那如果我找的倒7,8k的运维勒家里:你觉得你找的到吗?我:那你觉得我进的去好点儿的国企家里:机构肯定能帮你搞定的,而且国企里的5,6k相当于私企的1,2w.........我承认我实力还没达到8k左右的运维水准,但一股脑的说国企国企,也不分哪种国企的,也不看卡不卡学历的,睁眼闭眼全是国企..........人都是晕的
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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