Spring 工程中的 service 究竟应该怎样实现?
来源:1-2 为何我们需要每一个你
张勤一
2020-09-02
我们在写一个 Spring 工程时,如果让你实现一个功能,基本上就是定义一个接口,接口里面定义方法描述,然后再去定义一个类去实现这个接口。
问题来了,对于 99% 的情况,你的接口只会有一个实现类,那么,还有必要去定义这个接口吗?说说原因是什么?
6回答
-
其实还是很有必要的,有好几种场景都可以用到。这里我就举两个例子吧:
策略模式,具体例子我不举了,最终效果就是我只需要再封装一个方法,根据参数类型不同利用Spring的特性实现动态获取具体接口。如
@Autowired
private Map<String, IUserService> map = new HashMap<>();此时这个map会被自动注入,key为具体实现类名称,value为接口,就可以动态获取具体实现。
根据配置注入不同功能实例:
假设我有个接口是用于发送短信的,那么我可以事先写好比如亿美短信实现类,阿里云短信实现类。
然后分别在@Configuration 中注册两个 @Bean 的方法。
重点来了:每个 @Bean下面我可以添加如
@ConditionalOnProperty(prefix = "app", name = "sms", havingValue = "xxx")
然后就可以根据配置application.yml配置文件中 app.sms: 具体的值来决定整个系统使用哪个厂商短信发送。
322020-09-02 -
张勤一
提问者
2020-09-02
其实我个人写代码,很多时候并不会遵守原则和规范,毕竟那些多数时候都只是束缚而已:
1. 我确实知道对于 service 来说,只有一个实现类,真的没有必要再定义接口了,多余
2. 我不确定或者说会有多个 service 的实现类,必须要定义接口,且写好完备的注释
20 -
阿斯拉菲
2020-09-02
窃以为: 1、service 接口是MVC分层的产物吧,体现面向接口编程的思想,这样方便代码的扩展性。 2、我在工作中遇到的比较多的情况就是通过策略模式解耦,选取某个具体的处理类处理 3、一般的service我都是代码生成器生成的,所以没啥繁琐的工作量112020-09-02 -
无心铁憨憨
2020-09-02
如果确定只有一个实现类的话,我不会去定义接口,比较偷懒。
但是规范说了:要面向接口编程,所以,尽量规范一点,为了以后的扩展性考虑。
站在码农的角度来说,应该尽量让自己的代码更健壮、可维护性更高一点(前期编写成本高了,后期维护的成本会低很多)。
站在项目的角度来说,有些项目不需要扩展跟可维护性,都是不断的经历推倒重来的过程
112020-09-02 -
嘘哈
2020-09-02
我觉得应该有必要吧,为了ocp做啥都行
112020-09-02 -
SuccessorSocialism
2020-09-02
不定义 controller直接一把梭 浪费时间
有这时间我可以摸鱼水群吹牛逼 它不香吗?112020-09-02
相似问题