百摩网
当前位置: 首页 生活百科

数据耦合和控制耦合(耦合以及相关解耦的思想)

时间:2023-08-16 作者: 小编 阅读量: 1 栏目名: 生活百科

一个类,往往需要跟其他对象打交道,既包括获知其他对象的状态,也包括依赖其他对象的行为,而一旦这样的事情发生时,我们便称该类依赖于另一个对象。只要两个对象之间存在一方依赖另一方的关系,那么我们就称这两个对象之间存在耦合。相应软件程序的简单工厂的设计模式。项目代码松耦合状态常见的解耦方式DI,对依赖的解耦。这就是控制反转的思想。

作者:WinRT

原文地址:https://segmentfault.com/a/1190000038299637

耦合是如何产生的?

一个类,往往需要跟其他对象打交道,既包括获知其他对象的状态,也包括依赖其他对象的行为,而一旦这样的事情发生时,我们便称该类 依赖 于另一个对象。只要两个对象之间存在一方依赖另一方的关系,那么我们就称这两个对象之间存在 耦合

解除依赖的思想是如何产生的?

(1)原始社会里,没有社会分工。须要斧子的人(调用者)仅仅能自己去磨一把斧子(被调用者)。相应的情形为:软件程序里的调用者自己创建被调用者。

(2)进入工业社会,工厂出现。斧子不再由普通人完毕,而在工厂里被生产出来,此时须要斧子的人(调用者)找到工厂,购买斧子,无须关心斧子的制造过程。相应软件程序的简单工厂的设计模式。

(3)进入“按需分配”社会,需要斧子的人不需要找到工厂,坐在家里发出一个简单指令:须要斧子。斧子就自然出如今他面前。依赖注入。

从(1)、(2)可以看出,不同点是解放了自己工作,不需要去磨这个斧子了,但是相同点就是这个主导者,还依然是自己。就说你自己磨斧子还是自己去工厂里去取。这个主要调用者当事人还是自己。

从(2)(3)可以看出,相同点,我们不需要去磨这个斧子了。不同点,就是主导者变了,斧子已经不需要我们去取了,而是我们想要什么就去要什么。就是控制权已经改变了,他已经不是我们自己去控制的了。

解耦

即让每一个部分都相互独立,一个部分的改变不会影响其他部分。

项目代码松耦合状态常见的解耦方式
  • DI(Dependency Injection),对依赖的解耦。
  • aop(Aspect Oriented Programming),对关注切面关注点业务逻辑的解耦。
  • Dto(Data Transfer Object),对模型的解耦。
  • ddd领域驱动设计,对领域业务模块的解耦。
相关基本概念类和对象

类:类是一个静态的概念,类本身不携带任何数据。当没有为类创建任何对象时,类本身不存在于内存空间中。

对象new实例化的过程:声明引用;

使用new关键字创建类的对象并对其初始化;(分配内存空间)将引用指向类的对象。

控制反转 IoC(Inversion of Control)

举例场景:

比如上面的例子(3)(工厂伐木),从自己需要去工厂买个斧子,然后我们拿着斧子去上山伐木,变成甲方会给我们提供斧子,我们只需要在家里准备好去就行了,这个时候,我们对斧头这个控制权,已经从我们自己悄悄转化到调用者甲方身上了。这就是控制反转的思想。

比如你把程序里的一个写死的变量改成从配置文件里读取也是一种控制反转(由程序控制反转为由框架控制),你把这个配置改成用户UI界面的一个输入文本框由用户输入也是一种控制反转(由框架控制反转为由用户自己控制)。这些都用了控制反转思想。

什么是控制反转IoC(Inversion of Control)?

是一种设计原则,最早由Martin Fowler提出,因为其理论提出时间和成熟时间相对较晚,所以并没有被包含在GoF的《设计模式》中。

对依赖的控制,从自己,转到自己的调用者上。

依赖注入 DI(Dependency Injection)

依赖注入实现了new(做了new实例化这个动作),不是为了省一个new!

依赖注入实现IoC的其中一种设计方法。依赖的对象注入到调用者,你不应该自己创建它,而是应该通过构造函数,由你的调用者给你——容器。

举例场景——自动售货机

容器是一个自动售货机,组件是放在里面的在售商品,服务是商品的出售名称。

把商品(项目里的具体对象)放入自动售货机(容器)上架的过程叫注册;

注册的时候会给商品贴上标签,标注该商品的名称,这个名称就叫服务;

我们还可以标注这个商品的适用人群和过期时间等(生命周期作用域);

把这个包装后的商品放入自动售货机后,它就变成了在售商品(组件)。

当有顾客需要某个商品时,他只要对着售货机报一个商品名(服务名),自动售货机找到对应商品,抛出给客户,这个抛给你的过程,就叫做注入你;

而且这个售货机比较智能,抛出前还可以先判断商品是不是过期了,该不该抛给你。

依赖注入的步骤
  • 注册,创建映射关系

包含三种生命周期:AddTransient,每次注入或请求时都会创建转瞬即逝的服务;AddScoped,是按范围创建的,在Web应用程序中,每个Web请求都会创建一个新的独立服务范围;其中AddTransient和AddScoped每次注册的服务都会在被使用一次之后,被GC销毁掉。AddSingleton,每个DI容器创建一个单例服务,这通常意味着它们在每个应用程序只创建一次,然后用于整个应用程序生命周期,会一直存在内存里。

public void ConfigureServices(IServiceCollection services){// 注册services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();}

  • 创建,new实例化

public class ValuesController : ControllerBase{public IHttpContextAccessor HttpContextAccessor { get; set; }// 创建,这个时候去new实例public ValuesController(IHttpContextAccessor accessor){_accessor = accessor;}}

  • 调用/使用

public ActionResult<IEnumerable<string>> Get(){//调用var name = _accessor.HttpContext.User.Identity.Name;}

引用/参考: https://www.bilibili.com/video/BV1D4411c7s8?t=2100&p=9

作者:WinRT

原文地址:https://segmentfault.com/a/1190000038299637

    推荐阅读
  • 骨结核吃什么好(骨结核吃什么好得快)

    骨结核疾病是一种慢性消耗性疾病,所以在饮食方面要注意调养,这样更加有利于疾病的恢复。多吃蛋白质食物骨结核病人应该多吃富含蛋白质的食物,例如:瘦肉、豆类制品,多喝豆浆、牛奶。蛋白质是人体骨骼、肌肉、内脏的重要组成部分,骨结核病人多吃蛋白质有利于提高人体免疫力,促进病情恢复。

  • 红事送礼有什么讲究(朋友结婚送什么礼好)

    红事送礼有什么讲究生活实用类的礼物:一些生活的小家电、电饭煲、豆浆机、料理机、面包机、咖啡机、空气净化器等等,还可以送厨具、餐具,也可以送卫浴用品,另外床上四件套等,这些礼物都是生活中经常用到的,它们会让朋友经常想起祝福。寓意比较好的礼物:枕头,有长长久久的意思;桂圆红枣,有早生贵子的意思;鸳鸯被,有幸福和睦的意思,还有很多像这样含有幸福寓意的礼物。

  • 让人笑一遍的搞笑段子(六个超级搞笑的段子)

    于是我又拦了一辆出租车,打算给他们带路!一再叮嘱他们跟紧了,以免迷路!"师傅冲我会意地点下头,一脚油门飞驰而出,极速绕了几条街,差点闯红灯!女的伸出左手说:这里。一女同事指了指自己的脸,逗逼男同事:“雀斑!”逗逼男同事笑道:“我知道了,是丑字。”

  • tiktok直播镜像翻转怎么弄(云直播间助力轻松直播带货)

    云直播间助力轻松直播带货(一)账号直播条件无论是个人账户、企业账户还是创作者账户,只要你想打开tiktok直播需要满足以下两个条件:1.年满16周岁;2.拥有1000个粉丝。(二)直播回放tiktok直播是支持回放,有效期为90天。大部分都是亲自尝试,给消费者带来个人体验,尤其是网上名人的好处。通过网上名人的粉丝流量推广产品往往会取得不错的效果。

  • 拼多多30天省钱月卡怎么用 拼多多30天省钱月卡怎么用啊

    拼多多30天省钱月卡使用的方法是:1、专享神券。每月还有一张50-20,需要手动开抢,说是限量,但规则中说每月保证可领到一张,就是不确定时间。需要实际支付金额大于25元,且同时月卡有效其间订单数量需大于等于15单。两者必须同时满足,然后返50元(以内)的无门槛现金券,这个券有使用期限。每天可申请2件商品进行免费试用。拥有这张月卡是非常划算的,除了上边的专项特权意以外,后续购物还会返差价。

  • 大张伟经典语录(哲学家大张伟的10句话)

    我不是吃独食的人,所以我决定把大老师那些非常精彩的话,整理汇编一下,分享给各位,希望能给你们一些启发。(引号部分的话是大张伟的原话,有个别地方我做了修改,因为他的嘴太碎了,原话转成文字不太好理解。当然了,大老师说的“不背叛自己”,其实不只是关于婚姻。生活是服务当下和未来,而不是服务过去的。我要是抱怨北京房价贵、抱怨自己没背景、抱怨这个抱怨那个,那就是我有毛病——这是我自己选的,我为此承担一切。

  • 蒙面唱将猜猜猜张柏芝是第几期 蒙面唱将猜猜张柏芝是哪一期

    这档拥有全新赛制、阵容的原创音乐节目即将席卷电视荧幕,节目由李好主持,有30余位艺人蒙面上台献唱,接受由资深艺人大张伟、陶晶莹、Ella、王同学等组成的猜评团和全场观众的猜测考验。

  • 买房定金交了能不能退回(买房的定金可以退回来吗)

    张女士也就交了10万元的定金,定金数目不小,张女士也咬牙交了定金,孩子上学是大事,为了孩子好省一省就有了。房子也不要了,这种违法的事情还是不能干,但是销售称交了定金是不能退的,在认购书上也是有条款规定的,交了定金不能退。张女士也很后悔,房子没到手,定金还打了水漂。在我们的了解下,找到了开发商与其进行沟通协商几次的协商,终于帮助张女士退到了定金。

  • 一个鼓励的微笑作文600(关于一个鼓励的微笑作文)

    记得四年级时,学校竞选新一届大队委,度过重重难关,我进入了演讲环节。我精心准备,自信满满地来到演讲竞选现场,看到参加竞选同学很多,我发现想竞选成功难度不小,心中忐忑不安。很快轮到我,走上台往下一看,心里“咯噔”下,台下坐着校长和众多评委!一下子,全场安静下来,尽管我早有准备,但仍过于紧张。当我迈出第一步开始介绍自己时很慌乱,有些吞吞吐吐,看到台下校长的表情。鼓励信任给我带来巨大的满足!

  • 表达友谊的句子简短的(表达友谊的句子简短的推荐)

    下面内容希望能帮助到你,我们来一起看看吧!表达友谊的句子简短的友情又比不得爱情的吝啬,只要真诚的付出,就能有所收获。没有长篇大论的友情语录,只有见面时的无话不谈和开怀大笑。句句心语是我浓浓的思念与祝福,愿永远系着你温暖与喜悦,无论你在何方,但愿我们在同一片星空下纺织思念。爱情是灯,友情是影子,当灯灭了,你会发现你的周围都是影子。朋友,是在最后可以给你力量的人。