业务逻辑:未构思好谨慎查看。
让我猜猜看,是不是很多人觉得,弄4个service做个判断然后执行对应sql就完事了。
技术栈:
1.RestFul规范
2.Validation参数校验
3.策略+工厂模式
4.ffmpeg转换工具
5.springboot
解决方案:
1.第一个需要判断入口。在我看来无论是中文还是英语它是固定通用的。即便是题型也大差不差。
那么使用RestFul规范能不能解决部分判断问题
/{language}/{queryType}/questions
那么好,已经无需关心语言入口了。
2.虽然前端可以限制正常用户的输入。但是要是恶意调用接口呢。
所以我使用了Validation做参数校验
3.那么再说题型判断与执行前,我在思考我需要对查出来的数据做处理。
那么无论我是用switch还是用if都是要判断题型的。如果某一天加了诗,词,歌赋呢,我也要堆砌么?
那么有没有更优雅的方法呢。既然是要做选择,那必定先联想到策略
那么好,我定义了一个题型查询策略接口。做了对应题型的策略实现。然后定义一个context上下文配置类调用具体实体。
emm…优雅是优雅,还是得判断题型。执行对应实体。只不过判断转移到了上下文配置类中。还是不够优雅。闹心不 有没有在优雅的解决方案么。那必须得有啊。既然要执行实体。那必须得创建对象。一想到创建对象那必须得来个工厂啊。
像我这种摆烂货肯定懒得写。好麻烦。嗯~ ?IOC,DI,RestFul,判断题型入口,工厂。那必须得捡现成的啊。
我将策略实体注册成组件并命名beanName。通过RestFul去对应beanName。
在策略上下文中注入BeanFactory。调用getBean(beanName,策略接口)。将现成的工厂组合到策略上下文中。beanName还是要校验的。猜猜看我拿到了什么。那么根据language调用具体实现还成问题么?嘿嘿嘿…
再看一眼/{language}/{queryType}/questions (queryType=beanName) RestFul规范,通过url路径拿语言。beanName。当然还有一个body中的语音参数。那么在执行数据处理时。我只需要通过配置好的ffmpeg转换语音。然后根据beanName调用策略上下文中工厂的getBean。是不是拿到指定的查询策略。调用指定策略根据language是不是拿到了,对应语言对应题型。
(此处是处理逻辑)语音,指定策略数据都拿到了。将对应参数根据接口规范交给AI链路接口。我是不是拿到了处理好的数据。以后即便加了诗词歌赋,哪怕加坨米田共。我只需要在策略中加一个实现即可。