接口Interface的作用不止是解耦
简言:
好久没写博客了,今天手痒想写一写。废话少说,我们直入主题,相信大家对接口interface,这个单词一定不陌生。但是要说到它的作用,除了解耦之外,还有什么作用呢?可能大多数人都不是很清楚(大牛除外),下面请看:
demo环境:.net core 2.2
为什么要使用Interface?
在正常的开发中,假如现在要一个添加用户的功能,一般我们的步奏是,先定义一个IUserService接口,然后在定义一个UserService类,然后继承接口,实现接口的方法,例:



接下来在mvc或者api中通过ioc依赖注入下(注入的代码我就不贴了),然后就可以使用了:

但是现在问题来了,技术老大需要你在添加用户时(在正常开发中有可能是其他功能),判断下登录用户的用户类型,比如:只有用户类型为1的才能让他添加,其他的不能添加,并且,添加完还要记录日志。并且,你是刚接手这个项目,这个addnew方法是上一个人写的,里面又不止单纯的添加用户,还有其它复杂逻辑,在这时,一般人的做法是修改这个UserService类中的addnewasync方法,但是这样会有很多问题,比如:你一不小心删了或者多加了个什么东西,然后影响到后面的逻辑执行,还有如果下一个接手这个项目的人,随着修改的人越来越多,这个方法将变得异常复杂,让接收的无从下手。
使用Interface的好处:
第一步:修改UserAddDTO类:

第二步:新增一个UserServiceExtensions类,并继承自IUserService接口,通过构造函数传入一个IUserService对象:

第三步:修改下Ioc注入代码,关于该段注入代码,我参考了一篇文章:https://www.cnblogs.com/yilezhu/p/10236163.html:

最后一步:使用

结果:

既实现了我们要的功能,也不需要修改原有的类,这是接口的好处之一,关于接口还有许多的好处以及作用,在这里我就不一一介绍了。谢谢观看~!
————————————————————————————————结束线————————————————
---恢复内容结束---
接口Interface的作用不止是解耦的更多相关文章
- Rommel - C# 浅谈 接口(Interface)的作用
鉴于网上太多太多的对C# 接口的误解,想来想去还是自己做一个完美的接口 篇章 继承"基类"跟继承"接口"都能实现某些相同的功能,但有些接口能够完成的功能是只用基 ...
- C# 浅谈 接口(Interface)的作用
继承"基类"跟继承"接口"都能实现某些相同的功能,但有些接口能够完成的功能是只用基类无法实现的 1.接口用于描述一组类的公共方法/公共属性. 它不实现任何的方法 ...
- php中的抽象类(abstract class)和接口(interface)
一. 抽象类abstract class 1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类. 2 ...
- C#编程利器之三:接口(Interface)【转】
C#编程利器之三:接口(Interface) C#接口是一个让很多初学者容易迷糊的东西,用起来好象很简单,定义接口,然后在里面定义方法,通过继承与他的子类来完成具体的实现.但没有真正认识接口的作用的时 ...
- 【Java 基础篇】【第六课】接口interface
Java提供的这个interface的语法,目的就是将接口从类中剥离出来,构成独立的主体. 首先加入我们定义了这个杯子接口: interface Cup { void addWater(int w); ...
- Go语言学习笔记(四)结构体struct & 接口Interface & 反射
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...
- Go接口interface
目录 接口是什么? interface类型 空接口(interface{}) interface函数参数 interface变量存储的类型 类型断言 嵌入interface 接口是什么? Go 语言不 ...
- 理解什么是适配器(adapter)和接口(interface)
● 适配器(adapter) In computing, adapter is a hardware device or software component that converts transm ...
- Go 接口(interface)
文章转载地址:https://www.flysnow.org/2017/04/03/go-in-action-go-interface.html 1.什么是 interface? 简单的说,i ...
- Go语言学习笔记(四)结构体struct & 接口Interface & 反射reflect
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...
随机推荐
- 在 Linux 上安装服务器管理软件 Cockpit
Cockpit 是一个自由开源的服务器管理软件,它使得我们可以通过它好看的 web 前端界面轻松地管理我们的 GNU/Linux 服务器.Cockpit 使得 linux 系统管理员.系统维护员和开发 ...
- java集合框架复习----(2)List
文章目录 三.List集合 listIterator:迭代器 List实现类 1.泛型类 2.泛型接口 三.List集合 特点 有序,打印输出的顺序和添加时的顺序一致(不会帮你自动排序) 有下标,可以 ...
- vue+elementUi实现将数字转化为 对应的字符串内容
文章目录 1.实现的效果 2.template 3.方法中的数据 4.实际运用 1.实现的效果 数据库状态字段 vue前端效果 2.template prop是你的数据库的字段名称 <el-ta ...
- Go | 讲解GOROOT、GOPATH、GOBIN
前言 Go(又称 Golang)是 Google 开发的一种静态强类型.编译型.并发型,并具有垃圾回收功能的编程语言.Go 被誉为是未来的服务器端编程语言. Go是一门全新的静态类型开发语言,具有自动 ...
- 0025:2011年NOIp普及组真题——瑞士轮题解
题目链接:https://www.luogu.com.cn/problem/P1309 如果是新手可能马上会想到sort排序,每比一次就排一次,但是这样的时间复杂度有点高,只有60分: 这是因为每次比 ...
- MySQL 主从复制一主两从环境配置实战
MySQL 初始化 MySQL 主从复制是指数据可以从一个 MySQL 数据库服务器主节点复制到一个或多个从节点.MySQL 默认采用异步复制方式;从节点可以复制主数据库中的所有数据库或者特定的数据库 ...
- 真正“搞”懂HTTP协议02之空间穿梭
时隔四年,这个系列鸽了四年,我终于觉得我可以按照自己的思路和想法把这个系列完整的表达出来了. 想起四年前,那时候还是2018年的六月份,那时候我还工作不到两年,那时候我翻译了RFC2616的部分内容, ...
- Java 动态代理原理图解 (附:2种实现方式详细对比)
动态代理在 Java 中有着广泛的应用,例如:Spring AOP 面向切面编程,Hibernate 数据查询.以及 RPC Dubbo 远程调用等,都有非常多的实际应用@mikechen 目录 ...
- Aspose.Cell篇章3,设置写入到Excel文件的各种样式及输出
Aspose.Cell的Style.Number设置全部设置 /// <summary> /// 单元格样式编号 /// 0 General General /// 1 Decimal 0 ...
- jquery datatable 粗犷
需要学习: HTML.CSS.Javascript Bootstrap: 基于以上三个的一个框架 jQuery:一个 JavaScript 库. jQuery 极大地简化了 JavaScript 编程 ...