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

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

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

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

    推荐阅读
  • 解读标志的四个方向(分清这几种标志就知道了)

    直行道,就是这条车道只能直行,不能转弯也不能掉头,如果违反交通规则也会被抓拍处罚的噢。红色圆圈的标志属于禁令标志,表示会车让行。车辆会车时,面对该标志的车辆必须停车让对向车辆先行。掌握交通标志的含义,按指示行车,才能做到安全、高效、不违规。特别提示:夜间会车应当在距相对方向来车150米以外改用近光灯,在窄路、窄桥与非机动车会车时应当使用近光灯。

  • 在家里做鸡蛋面条怎么做好吃(鸡蛋煮面条的做法)

    下面更多详细答案一起来看看吧!在家里做鸡蛋面条怎么做好吃食材:面条(生)1块、鸡蛋3个、食盐适量、调和油适量。准备好一块面条和三个鸡蛋,葱适量。起油锅,把鸡蛋打进去,往鸡蛋中间蛋黄里洒上点盐花,等鸡蛋煎好一面,再翻过来煎另外一面。煎好的鸡蛋,放入锅里,倒进去冷开水或者高汤。煮一分钟,用筷子把面条挑散开来。等所有面条都散开,洒上点盐花和葱花,即可上盘。

  • 大闸蟹存放多少时间(大闸蟹可以存放多久)

    接下来我们就一起去了解一下吧!大闸蟹存放多少时间大闸蟹常温活养是鲜活保存方法中保存最久的一种,至少可存放5~7天,若是定期的添加食物,能养活半个月之久。如果所购大闸蟹量多三五天吃不完,最好的保存办法是,把自己的浴缸作为临时的池子大闸蟹生命力强,一般保存方式:保存温度约5℃平时放置生鲜台上,2-3小时喷水一次。晚上放置保力龙箱内,加少许冰块即可,加盖,但容器侧边需开孔保持通风。

  • 大闸蟹和地瓜能否一起吃(可以一起吃大闸蟹和地瓜吗)

    跟着小编一起来看一看吧!大闸蟹和地瓜能否一起吃大闸蟹和地瓜最好不要一起吃。地瓜的淀粉含量很高,食用后不容易消化,而螃蟹中富含蛋白质,且性寒,也不宜消化。两者一起大量食用的话会导致肠胃不适,出现腹胀、腹泻等问题,还有人说会在体内形成结石。

  • 光遇的日常任务在哪里(光遇怎么领取日常任务)

    光遇的日常任务在哪里?跟着小编一起来看一看吧!《光·遇》是一款社交冒险游戏。光之后裔秉持蜡烛,在天空王国探索过去的历史,拯救先祖灵魂;与伙伴们遨游云端,携手冒险,寻找自我的价值。目前游戏包含了七个地图,分别是迷雾氤氲的初生地晨岛、绿意盎然的云野、潮湿繁茂的雨林、晚霞瑰丽的霞谷、庄严肃穆的暮土、寂静神圣的禁阁以及最终挑战”暴风眼”。

  • 2022余姚市高中志愿在哪填报 2021年余姚中考志愿填报

    附填报入口志愿填报入口:余姚教育网招生范围所有高中段学校均面向全市招生。录取类别(一)余姚中学招生分自主招生、统一招生、定向招生三类。各校特长生(特色班)招生在第一批次后录取。(三)职业高中招生分提前批和中考成绩揭晓后的志愿填报招生。

  • 葡萄酒配餐小技巧 葡萄酒的配餐方式有哪些

    酸度在葡萄酒的配餐中扮演着非常重要的角色,在选酒的时候一定要多多注意。白葡萄酒的香气能够覆盖海鲜的腥味,同时能够提升海鲜的鲜味,可谓一举两得。我们都知道酒体是描述葡萄酒在口中重量感的一个指标,但其实食物也有类似的指标。甜葡萄酒当中的糖分能够有效缓和香料的刺激感和辛辣感,但又不会完全覆盖掉菜肴的香味。

  • 大熊猫新亚种是哪里的大熊猫(关于新亚种大熊猫介绍)

    大熊猫的新亚种是秦岭的大熊猫,今天小编就来说说关于大熊猫新亚种是哪里的大熊猫?下面更多详细答案一起来看看吧!秦岭是中国大熊猫纬度最高的分布区,种群密度居全国之首。秦岭大熊猫是大熊猫的重要种群,具有独特的分布格局和种群进化史。在形态学和分子生物学等特征方面,秦岭大熊猫与四川、甘肃的大熊猫之间有着明显差异,是大熊猫的一个独立亚种,被命名为大熊猫秦岭亚种。

  • 通常所说的微型机主机是(通常说微型机主机是指)

    通常所说的微型机主机是是指CPU和内存。

  • 安徽芜湖:古城“夜经济”释放新活力

    6月开始,多地围绕夜间文旅经济发力,在做好疫情防控的同时,助推旅游业复苏。安徽发放文旅商贸惠民消费券近1.9亿元,特别加大对夜间文旅消费集聚区、影剧院消费补贴力度,引导、刺激夜间消费。芜湖古城运营方提供的最新数据显示,从“五一”假期开始,受疫情影响的客流开始逐步恢复,每周可递增近10%,今年6月的客流量已经突破40万人次。该部门数据显示,2022年一季度,中国旅游收入0.77万亿元,比上年同期增长4.0%。