简言:  

    好久没写博客了,今天手痒想写一写。废话少说,我们直入主题,相信大家对接口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的作用不止是解耦的更多相关文章

  1. Rommel - C# 浅谈 接口(Interface)的作用

    鉴于网上太多太多的对C# 接口的误解,想来想去还是自己做一个完美的接口 篇章 继承"基类"跟继承"接口"都能实现某些相同的功能,但有些接口能够完成的功能是只用基 ...

  2. C# 浅谈 接口(Interface)的作用

    继承"基类"跟继承"接口"都能实现某些相同的功能,但有些接口能够完成的功能是只用基类无法实现的 1.接口用于描述一组类的公共方法/公共属性. 它不实现任何的方法 ...

  3. php中的抽象类(abstract class)和接口(interface)

    一. 抽象类abstract class 1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类. 2 ...

  4. C#编程利器之三:接口(Interface)【转】

    C#编程利器之三:接口(Interface) C#接口是一个让很多初学者容易迷糊的东西,用起来好象很简单,定义接口,然后在里面定义方法,通过继承与他的子类来完成具体的实现.但没有真正认识接口的作用的时 ...

  5. 【Java 基础篇】【第六课】接口interface

    Java提供的这个interface的语法,目的就是将接口从类中剥离出来,构成独立的主体. 首先加入我们定义了这个杯子接口: interface Cup { void addWater(int w); ...

  6. Go语言学习笔记(四)结构体struct & 接口Interface & 反射

    加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...

  7. Go接口interface

    目录 接口是什么? interface类型 空接口(interface{}) interface函数参数 interface变量存储的类型 类型断言 嵌入interface 接口是什么? Go 语言不 ...

  8. 理解什么是适配器(adapter)和接口(interface)

    ● 适配器(adapter) In computing, adapter is a hardware device or software component that converts transm ...

  9. Go 接口(interface)

        文章转载地址:https://www.flysnow.org/2017/04/03/go-in-action-go-interface.html 1.什么是 interface? 简单的说,i ...

  10. Go语言学习笔记(四)结构体struct & 接口Interface & 反射reflect

    加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...

随机推荐

  1. 在Ubuntu 主机上使用 Cockpit 管理容器

    如果你管理着一台 Linux 服务器,那么你可能正在寻找一个可靠的管理工具.为了这个你可能已经看了 Webmin 和 cPanel 这类软件.但是,如果你正在寻找一种简单的方法来管理还包括了 Dock ...

  2. 《Thinking In Java》作者:不要使用并发!

    前言 今天纯粹就是带你们来读读书的~ 最近除了工作,特地买回了自己很喜欢的作者新发售的一本书<On Java>,作者是我的老朋友布鲁斯·埃克尔,在Java领域很有名,你可能没听过他的名字, ...

  3. PAT (Basic Level) Practice 1032 挖掘机技术哪家强 分数 20

    为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第 1 行给出不超过 105 的正整数 N,即参赛人数.随后 N  ...

  4. 「Tubian」Tubian0.41!支持Windows QQ微信!

    Tubian 0.42已发布:https://www.cnblogs.com/tubentubentu/p/16745926.html Sourceforge.net下载:https://source ...

  5. 小程序uni-app发起网络异步请求

    // uni.request({ // url: 'api/boxs/search', // // 使用监听函数防止this指向改变 // success: res => { // // 判断是 ...

  6. 数据结构之单链表(基于Java实现)

    链表:在计算机中用一组任意的存储单元存储线性表的数据元素称为链式存储结构,这组存储结构可以是连续的,也可以是不连续的,因此在存储数据元素时可以动态分配内存. 注:在java中没有指针的概念,可以理解为 ...

  7. Docker容器技术基础

    Docker基础 目录 Docker基础 容器(Container) 传统虚拟化与容器的区别 Linux容器技术 Linux Namespaces CGroups LXC docker基本概念 doc ...

  8. JavaFx 使用字体图标记录

    原文:JavaFx 使用字体图标记录 - Stars-One的杂货小窝 之前其实也是研究过关于字体图标的使用,还整了个库Tornadofx学习笔记(4)--IconTextFx开源库,整合5000+个 ...

  9. CRT & EXCRT 学习笔记

    这玩意解决的是把同余方程组合并的问题. CRT的核心思想和拉格朗日插值差不多,就是构造一组\(R_i\)使得$\forall i,j(i \neq j) $ \[R_im_i = 1, R_im_j ...

  10. iptables基本使用举例

    一.链的基本操作 1.清除所有的规则. 1)清除预设表filter中所有规则链中的规则. # iptables -F 2)清除预设表filter中使用者自定链中的规则. #iptables -X #i ...