service和serviceImpl的选择

摘要:
在同行中,一些同行公司的代码风格是服务层=服务接口+serviceImpl实现类;一些同行公司的代码风格是服务层=服务类;为什么不呢?类比服务层=服务接口+serviceImpl实现类;服务接口层是端口。serviceImpl实现类中的不同方法是路1、路2和路3。使用服务层=服务接口+serviceImpl实施类的形式后,业务逻辑将更容易扩展。

同行中,有些同行公司的代码风格是service层=service接口+serviceImpl实现类;

而有的同行公司的代码风格是service层=service类;

为什么不一样呢?

以前没想过这个问题,今天突然对这个产生了疑惑,通过百度,和github及朋友处以及自己的思考,有了如下结论:

当项目的业务逻辑简单时,可选择service层=service类;

当项目的业务复杂时,可选择service层=service接口+serviceImpl实现类;

至于复杂和简单的度得自己把握;

为什么有这样的区别呢?

我举个例子,

当我在定义接口时,会有一个权限验证的方法,

但是并不是所有的请求都回进入这个方法(比如登录接口);

此时,可将请求经过的路线分为两类:1(进入过权限验证),2(没有进入过权限验证);

但这两条路都是从同一个端口进入后台的。

类比

service层=service接口+serviceImpl实现类;

service接口层就是端口,serviceImpl实现类里不同的方法就是路1,和路2.乃至路3。

以上为举例。

当使用

service层=service接口+serviceImpl实现类——的形式后,

业务逻辑将会更便于扩展。

但缺点就是:多了一层——service接口;

凡事都有得必有失;

但我们可以因地制宜,选择最合适自己项目的。

以上,个人理解。

--------------------------------------------------------补充--------------------------------------------------------

今天在看 spring实战(第4版)的时候,看到另一种解释

如下:

spring鼓励应用程序的各个层以接口的形式暴露功能,在service层,可以使用service接口+serviceImple实现类,也可以使用service类,但考虑到“接口时实现松耦合的关键”,所以更加推荐使用

service接口+serviceImple实现类的方式来写service层代码。

核心是“松耦合”,

而之前我理解的核心是“高扩展性”。

以上。

免责声明:文章转载自《service和serviceImpl的选择》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇PostGIS数据库导入SHP数据.NET CORE 2.1 导出excel文件的两种方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux free 命令下free/available区别

转载于https://www.jianshu.com/p/2ffeb3a3aa90 例子 [root@VM_16_17_centos bin]# free total used free shared buff/cache available Mem: 1882892...

ACI概述

ACI逻辑: 租户逻辑 接口逻辑: 1 上线 Spine设备和Leaf设备按照拓扑连接加电后拓扑和配置自动生产,无需人工干预,实现自动化上线(LLDP发现) 控制器APIC封装在cisco自有的C系列服务器里,APIC接入到任意Leaf即可,三台APIC服务器尽量分别接入不同的leaf并双链路上行。 然后就是初始化APIC了。 2 初始化APIC 这...

vue.js 本地调用远程接口进行开发,如何进行跨域及cookie传递

在前后端分离vue作为前端框架,在使用服务器接口时面临的第一个问题就是跨域。本文涉及内容仅保证在vue-cli3.0脚手架创建的项目中、及本地调试中有效(使用之前版本脚手架创建的项目请自行转换),本文内容不适用于服务器端前后台打包部署。 一、处理跨域接口调用 1、在项目根目录下建立vue .config.js文件 2、在vue.config.js中配置本...

IOS 验证码

将十六进制的字符串转化为UIImage     最近写一个项目,有验证码,但是接口返回的并不是验证码图片的URL,而是返回的字节数组16进制字符串。这样就需要把16进制字符串首先字节数组,其次再把字节数组转化为NSData,最后再把NSData转化为UIImage。其中最重要的是如何把16进制的字符串转换为字节数组。首先要把字节数组和16进制关联起来。1...

一个简单 JDK 动态代理的实例

动态代理的步骤: 创建一个实现了 InvocationHandler 接口的类,必须重写接口里的 invoke()方法。 创建被代理的类和接口 通过 Proxy 的静态方法 newProxyInsatance(ClassLoader loader,Class[] interfaces,InvocationHandler,handler) 来创建一个代...

WEB接口测试之Jmeter接口测试自动化 (二)(数据分离)

转载: http://www.cnblogs.com/chengtch/p/6105231.html 通过逐个录入的方式,好不容易将需要测试几十个接口的300多个测试用例录入sampler-http请求中,固定的测试环境跑起来也还 感觉良好。不料在新服务器环境中跑用例时,问题来了:修改参数维护脚本等成本太大! 脚本参数是写死的,修改起来得一个个请求打开来...