估计很多java开发的同学都遇到过,service层要写一个接口,然后再写接口的实现类,但这个接口从项目开始到项目倒闭,都不会有第二个实现,那为什么不直接写个service类呢?如果你还没想过这个问题,那要好好想想了。

网友支持接口模式的,大概原因如下:

1、现在大部分工程都是基于spring框架开发的,我们知道,spring的开发风格就是面向接口的,所以很多人照着搬过来了,如果你真的是只有这个理由,那就要想想是不是只学到招数,没学到内力。
2、接口就是多态,加了接口会有更高的灵活性,说的没毛病,但你真的需要这个灵活性吗。
3、如果多人开发,每个人负责一层,那么负责service的这个人在开发初期,可以先定义一套接口出来供controller层的同学用,完了实现自己慢慢写。这种开发模式现在基本不会有了吧,现在基本上是按业务模块分的开发任务,很少按照这种层级分的。
4、各种设计模式会用到接口,对应多个实现,这个确实,java就继承和实现两种方式,尤其是接口实现,没有这个功能,很多设计模式都没法用了,这个没毛病。

我的想法:

关于service层接口。
该用的时候用,不该用的时候可以不用。
也可以认为是基础类不该用,复杂业务该用。

原因如下:

1、一个基础类,比如一个用户表user,对应userService,很难出现多个实现,基本一个项目写完userService后,很长时间都不会去改,更别说多个实现了,所以这种情况下完全不用写接口,直接写个Service类:UserService。这个也是为什么很多人一开始编码后一直的疑惑,包括我,一开始看项目的老代码,包括github上的一些代码,包括一些自动生成代码插件的工具,都是这种接口的风格,导致我一段时间内在怀疑自己是不是哪个地方的知识点有很大缺陷导致看不到这种接口模式的好处。
当然,如果你的表对应多个数据源,就可以考虑用接口模式,但一般不会的出现。
2、复杂的业务,一定要用接口。比如对于一个订单中台来说,一个下订单的接口,基础入参就是商品list,用户信息。可对应不同业务的情况,就会有不同的下单实现,而多个业务部门就会调用同一个下单接口,这个时候,就要不同的接口实现了。

到这里,很多人会拿规范二字来理论,既然复杂业务都要写接口,那就干脆都写成接口算了,现在这样不挺好的么。
对于这种说法,我只想用一句话反驳:有些事情你明显知道做了是没有用的,你却要执意去做,除了某些有强迫症的人,我实在想不到什么理由让我做。

总结:

service用不用接口,其实没那么复杂,我总结了几点,供参考:
1、简单的基础实体类对应的service,没必要用接口,尤其是微服务模式下。
2、除了简单基础类对应的service,其他service最好都用接口的模式,因为业务层,谁也不敢保证哪天会有什么扩展。

多说一句:

在我看来,其实很多地方都可以省略,比如微服务模式下,一个简单的服务的service层都可以省略。但我的前提是简单的。比如一个部门表,只是提供了增删改查等简单接口,没有太多复杂的东西的时候,完全可以省掉service层,dao层写sql,controller层写实现,完了把功能http暴露出去就行了。

很多地方,我认为我们要大胆的想,不一定之前的就一定是对的,如果你发现了冗余的地方,在各种考证后发现确实冗余了,就应该去删掉他,而不是随波逐流。

否则,就会发生有一天比你年龄小的人跑过来请教你:“前辈,这个service层为什么要加接口,直接写实现不好吗”的时候,你只能用:“我也不清楚,之前一直是这么写的,所以我也跟着这么写了”来回答。

[java基础] --- java开发,service层是不是一定要写接口相关推荐

  1. Java基础-配置开发环境-安装JDK

    Java基础-配置开发环境-安装JDK 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.计算机基础知识 1>.计算机的组成 计算机有硬件与软件组成. 2>.硬件: 硬 ...

  2. java基础-Eclipse开发工具介绍

    java基础-Eclipse开发工具介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 所谓工欲善其事必先利其器,即将身为一名Java开发工程师怎么能没有一款好使的IDE呢?今天就 ...

  3. java基础-Idea开发工具介绍

    java基础-Idea开发工具介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前给大家介绍过一款Java的IDE叫eclipse,有些功能用起来不是很得心应手,尤其是在导报的 ...

  4. Java基础——Java多继承的三种实现方式

    Java基础--Java"多继承"的三种实现方式 Java语言本身只支持单继承(每个类只能有一个父类),但单继承的局限性很大,因此,可以通过以下的方式实现"多继承&quo ...

  5. Java基础----Java编程语言概述

    Java基础----Java编程语言概述 文章目录 Java基础----Java编程语言概述 Java编程语言概述 1-1 软件开发介绍 1.1软件开发介绍 1.2 常用命令 1-2 计算机编程语言介 ...

  6. JAVA基础--JAVA SE(知识点总结 Ⅴ )

    前面内容请见: JAVA基础–JAVA SE(知识点总结 Ⅰ ) JAVA基础–JAVA SE(知识点总结 Ⅱ ) JAVA基础–JAVA SE(知识点总结 Ⅲ ) JAVA基础–JAVA SE(知识 ...

  7. Java基础-Java中的堆内存和离堆内存机制

    Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 转载于:https://www.cnblogs.com/yinzhengjie/p/9 ...

  8. Java基础-JAVA中常见的数据结构介绍

    Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...

  9. Java基础-Java中的内存分配与回收机制

    Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二. 转载于:https://www.cnblogs.com/yinzhengji ...

最新文章

  1. 《计算机组成原理》课程设计报告——TEC-2实验系统——微程序设计
  2. windows 加域
  3. 分布式服务器客户端实验
  4. 7.1.16 jQueray的鼠标事件
  5. 【2018新年巨献】像阿里巴巴一样高效工作!(含视频、文章、PDF文件)
  6. TI DSP simulator 种类选择
  7. 【神经网络与深度学习】CIFAR-10数据集介绍
  8. 【java学习之路】(java框架)008.JdbcTemplate
  9. 德清租房软件测试,张家口商场附近出租房
  10. 活动图中创建泳道(UML2活动框图创建泳道图例和操作流程)
  11. Flutter系列之设置Dialog的宽度
  12. RSA之 两组e与φ(n)不互素解法
  13. Android View学习笔记(三):Scroller的原理剖析及使用(上)
  14. JavaScript时间日期
  15. Go 1.19.3 error原理简析
  16. chartContrl 折线图添加报警线和一些其他设置 放大缩小折线图等
  17. robotframework 内置库BuiltIn学习笔记
  18. html页面角落放动漫人物,L2Dwidget.js L2D网页动画人物添加
  19. SQL中union的常用用法~~解决数据拼凑、表中两列合并等问题
  20. Unity插件分享——Adjust Pivot 修改物体的轴心

热门文章

  1. 弄懂goroutine调度原理
  2. java堆分析神器MAT
  3. JAVA并发编程3_线程同步之synchronized关键字
  4. Firebug控制台详解[转]
  5. POJ 2255/递归:前序中序求后序
  6. 牛客16437 买铅笔
  7. QT高级编程之QT基本概览
  8. java计算加速减速_Javascript加速运动与减速运动
  9. python安装oracle驱动_Python安装Oracle数据库驱动
  10. 小括号教学设计导入_2020年小学教师资格证复习资料之小学课堂教学导入-教师吧...