因为设计模式————加班14天,没写出来一个需求

这几天在美团加班了14天,没写出来代码。 不解释,纯菜。

适配器模式

我有一个非常简单的需求:更新一个字段。 有人说:那还不简单,一个update直接解决啊。你菜就直说,别绕弯子。

这时候。就遇见了第一个问题:适配器模式。

美团有两个不同的公司:美团、大众点评。他们底层代码是不一致的。 我上线的所有功能,当我更新的时候,美团开始售卖,大众点评也开始售卖。

如何实现?适配器模式。

  • 我更新了以后,通过适配器模式实现两个不同的变更。不需要同时改动美团和大众点评的代码

所以,我只能调用提供的接口来进行变更。

  • 我不能直接操作数据库,我需要操作适配器

通过适配器来调整参数。

策略模式

然后就出现了第二个问题:美团有版本1.0和版本2.0

美团有版本1.0、版本2.0,同时还得更新大众点评。 于是我们就可以了解这个项目的全貌了:

  • 通过策略模式,来控制流量走哪个接口
  • 然后通过适配器模式,来同时更新美团和大众点评

于是大聪明就出现了:

  • 先通过策略模式实现流量的转发,控制1.0还有2.0
  • 然后再通过策略模式实现业务的切换
  • 最后通过适配器实现双端售卖

策咯模式套策略模式套适配器模式

但是有个问题我得给你聊:美团有个业务,他数据量太大了,底层数据库扛不住。

那咋办?我有个建议:上es。

双写,然后读es。

太简单了:实现一个策略模式,读取es和mysql

于是大聪明就出现了:策略模式 大聪明已经看懂了:

  • 通过策略模式实现流量的转发,控制1.0还是2.0
  • 然后通过策略模式实现业务的切换
  • 在业务中,实现策略模式,实现es和mysql的双写

DDD解耦方式

而这个逻辑,被封装进了一个服务中。

人话:通过微服务进行aop切面

  • 我调用某个服务
  • 服务给你构建上下文,然后将新的上下文传给你
  • 你基于这个服务实现切面

我们可以通过一个统一的上下文,来管理策略的控制。 ×  你传入一个特定的参数,我们通过参数来控制上下文,来实现策略的转发

好消息好消息:我开发的需求正好击穿了上下文模式。

你看:我传入了一个上下文,他是用来实现策略模式的。 但是问题是:我的场景没办法传入上下文。

我新接入了一个业务方,想要接入这个,需要单独的给这个业务方构建上下文。 但是:请问构建上下文的微服务是哪个?

线程安全 + 重试

然后我们继续聊:上下文模式需要传入上下文,但是上下文有线程安全问题。

原因也非常简单:

  • 我的接口有性能问题,必须使用多线程
  • 而多线程不能共享一个上下文

我复述一下这个问题:

  • 一个接入方,他必须使用统一的上下文
  • 但是我这个接入方,他需要可变上下文
  • 但是我有线程安全问题,所以必须单独构建上下文

if

我很生气,于是我就开始写if分支了。 我不传上下文,我直接手写if else不行?

然后主R表示:你这样无法维护,没法下线

  • 你得实现策略模式,依赖美团实现的策略模式套策略模式,实现策略模式

然后我就凉凉了。

学不会?

简单来说,滥用了策略模式,导致学习成本极高。 不用策略模式,开发成本也极高

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
青碧凝霜
下载 APP