匿名聊天网站开发/steam交易链接怎么用

匿名聊天网站开发,steam交易链接怎么用,中国建设造价信息网站,哈尔滨做网站费用报价在面向对象编程中,SOLID 是五个设计原则的首字母缩写,旨在使软件设计更易于理解、灵活和可维护。这些原则是由美国软件工程师和讲师罗伯特C马丁(Robert Cecil Martin)提出的许多原则的子集,在他2000年的论文《设计原则与设计模式》中首次提出…

在面向对象编程中,SOLID 是五个设计原则的首字母缩写,旨在使软件设计更易于理解、灵活和可维护。这些原则是由美国软件工程师和讲师罗伯特·C·马丁(Robert Cecil Martin)提出的许多原则的子集,在他2000年的论文《设计原则与设计模式》中首次提出。

SOLID 原则包含:

  • S:单一功能原则(single-responsibility principle)

  • O:开闭原则(open-closed principle)

  • L:里氏替换原则(Liskov substitution principle)

  • I:接口隔离原则(Interface segregation principle)

  • D:依赖反转原则(Dependency inversion principle)

本文我们来介绍依赖反转原则

依赖反转原则

在面向对象编程领域中,依赖反转原则(Dependency inversion principle,DIP)是指一种特定的解耦形式,使得高层次的模块不依赖于低层次模块的实现细节,依赖关系被颠倒(反转),从而使低层次模块依赖于高层次模块的需求抽象。传统的依赖关系创建在高层次上,而具体的策略设置则应用在低层次的模块上

39ad2b7a1d1fe39b99f4cce78d955589.png

图1 中,高层 对象A 依赖于低层 对象B 的实现;图2 中,把高层 对象A 对低层对象的需求抽象为一个 接口A,低层 对象B 实现了 接口A,这就是依赖反转。

依赖反转原则约定:

  • 高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象接口。

  • 抽象接口不应该依赖于具体实现。而具体实现则应该依赖于抽象接口。

该原则颠倒了一部分人对于面向对象设计的认识方式(如高层次和低层次对象都应该依赖于相同的抽象接口)。

依赖注入是该原则的一种实现方式。

C# 示例

先定义一个商品信息类:

public class ProductInfo
{public int ID { get; set; }public string ProductName { get; set; }public string ProductSpec { get; set; }public int Stock { get; set; }
}

§糟糕的示范

新建一个数据访问类 ProductDataAccess 和业务逻辑类 ProductBusinessLogic

public class ProductDataAccess
{public ProductInfo GetDetail(int id){ProductInfo product = new(){ID = id,ProductName = "白糖",ProductSpec = "500g",Stock = 100};return product;}
}public class ProductBusinessLogic
{private readonly ProductDataAccess _productDataAccess;public ProductBusinessLogic(){_productDataAccess = new ProductDataAccess();}public ProductInfo GetProductDetails(int id){return _productDataAccess.GetDetail(id);}
}

在上面的代码中,高层次的类 ProductBusinessLogic 直接依赖于低层次的类 ProductDataAccess,这明显违反了 依赖反转原则

§正确的示范

根据 依赖反转原则 的要求,我们把高层对象 ProductBusinessLogic 对低层对象的需求抽象为一个接口 IProductDataAccess

public interface IProductDataAccess
{ProductInfo GetDetail(int id);
}

在低层对象 ProductDataAccess 中实现接口 IProductDataAccess,然后在高层对象 ProductBusinessLogic 中引用(注入)接口 IProductDataAccess

public class ProductDataAccess : IProductDataAccess
{public ProductInfo GetDetail(int id){ProductInfo product = new(){ID = id,ProductName = "白糖",ProductSpec = "500g",Stock = 100};return product;}
}public class ProductBusinessLogic
{private readonly IProductDataAccess _productDataAccess;public ProductBusinessLogic(IProductDataAccess productDataAccess){_productDataAccess = productDataAccess;}public ProductInfo GetProductDetails(int id){return _productDataAccess.GetDetail(id);}
}

这样,这些类的设计便遵守了依赖反转原则

其实,ASP.NET Core 中服务的依赖注入正是遵循了依赖反转原则

总结

本文我介绍了 SOLID 原则中的依赖反转原则(Dependency inversion principle),并通过 C# 代码示例简明地诠释了它的含意和实现,希望对您有所帮助。

作者 :技术译民
出品 :技术译站(https://ITTranslator.cn/)

参考文档:

  • https://en.wikipedia.org/wiki/SOLID

  • https://www.c-sharpcorner.com/blogs/dependency-inversion-principle-in-c-sharp

  • https://flylib.com/books/en/4.444.1.71/1/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/284358.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux学习笔记之一————什么是Linux及其应用领域

1.1认识Linux 1)什么是操作系统 2)现实生活中的操作系统 win7 Mac Android iOS 3) 操作系统的发展史 (1)Unix 1965年之前的时候,电脑并不像现在一样普遍,它可不是一般人能碰的起的,…

Lucene详解

一.lucene原理 Lucene 是apache软件基金会一个开放源代码的全文检索引擎工具包,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能…

.NET 6.0中使用Identity框架实现JWT身份认证与授权

原文作者:Sarathlal Saseendran原文链接:https://www.c-sharpcorner.com/article/jwt-authentication-and-authorization-in-net-6-0-with-identity-framework/翻译:沙漠尽头的狼(谷歌翻译加持)介绍微软于 2021 年 11 …

adb devices 里面有很多 emulator-XXXX的解决方法

2019独角兽企业重金招聘Python工程师标准>>> adb kill-server 转载于:https://my.oschina.net/sfshine/blog/700354

MQ(Message Queue)简介

一、何为MQ? MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通…

Blazor University (39)JavaScript 互操作 —— 更新 document title

原文链接:https://blazor-university.com/javascript-interop/calling-javascript-from-dotnet/updating-the-document-title/更新 document title源代码[1]在创建 Blazor 布局[2]部分中,我们看到了 Blazor 应用程序如何存在于 HTML(或 cshtm…

IIS 日志文件位置

IIS 6 Log files location IIS 6中日志文件的位置%windir%\System32\LogFilesIIS 7 Log files location IIS的日志文件的位置%SystemDrive%\inetpub\logs\LogFiles用户每打开一次网页,iis 都会记录用户IP、访问的网页地址、访问时间、访问状态等信息,这些…

APP测试流程和测试点

1 APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间。正式测试前先向主管确认项目排期。 1.3测试资源 测…

39所强基计划试点高校已全部公布招生简章

截至目前(4月8日下午) 39所强基计划试点高校 已全部公布招生简章 各高校招生要求是什么? 招生专业有哪些? 什么时候报名? 一起来看 北京大学 招生对象及报名条件 各省(区、市)符合2022年全国普通高等学校招生统…

【ArcGIS错误异常100问】之001:License服务无法启动权威解决办法

测试环境: 操作系统:Windows10ArcGIS版本:10.X结果:通过测试 文章目录1. 错误提示2. 问题分析3. 解决办法3.1 关闭Windows Defender3.2 关闭系统防火墙3.3 删除迈克菲(McAfee)杀毒软件3.4 在系统服务中启动…

ASP.NET Core 技术内幕与项目实战读后感

前几天拿到了杨中科老师的新书《ASP.NET Core 技术内幕与项目实战》,迫不及待的“两”口气读完了。用一句话来总结,这是一本写给.NET开发者的非常实用的接地气的好书,感觉有必要自发为这本书宣传一波。杨老师在 .NET 开发者社区中的知名度非常…

avalon2学习教程15指令总结

avalon的指令在上一节已经全部介绍完毕,当然有的语焉不详,如ms-js。本节主要总结我对这方面的思考与探索。 MVVM的成功很大一语分是来自于其指令,或叫绑定。让操作视图的功能交由形形式式的指令来代劳。VM,成了一个大管家。它只一…

【ArcGIS错误异常100问】之002:Error 000735 简化容差:值是必需的(简化线、简化面工具)

测试环境: 操作系统:windows7ArcGIS版本:10.2结果:通过测试 文章目录1. 错误提示2. 问题分析3. 解决办法4. 问题验证1. 错误提示 在ArcGIS中使用简化面或者简化线工具时,点击确定会提示Error 000735:简化容…

.NET桌面开发的一些思考

在22日,我在公众号上发布了一条短文字,内容如下:其实在.NET开发大军中,还有一股力量,那就是桌面程序的开发者们。他们很少发声,可能技术成熟,可能太企业化了,也可能我没关注到。最近…

【ArcGIS错误异常100问】之003:属性表中文乱码解决办法总结

测试环境: 操作系统:windows7ArcGIS版本:10.X、Pro结果:通过测试 文章目录1. 错误提示2. 原因分析3. 解决方法4. 问题验证1. 错误提示 如图所示,安装完ArcGIS Pro后,由于计算机系统和应用软件字符编码的问…

大型网站架构演化(二)——应用服务和数据服务分离

随着网站业务的发展,一台服务器逐渐不能满足需求:越来越多的用户访问导致性能越来越差,越来越多的数据导致存储空间不足。这时就需要将应用和数据分离。应用和数据分离后整个网站使用三台服务器:应用服务器、文件服务器和数据库服…

再不自动化就晚啦!优云教你4步打造基于CentOS的产品镜像

随着Linux程序的增多,软件的安装过程中经常出现如下问题: 1、硬件配置类似或者相同时,批量安装系统和软件,希望实现自动化安装,减少安装时间和人为出错。 2、工程实施人员在不同客户现场进行系统和软件安装(硬件配置不…

【ArcGIS错误异常100问】之004:ArcGIS表转Excel超了65535限制解决办法

测试环境: 操作系统:windows7ArcGIS版本:10.2 文章目录1. 错误提示2. 原因分析3. 解决方法1. 错误提示 如下图,当矢量shp图斑数目过多,文件超过了65535条记录时,利用ArcGIS的表转Excel工具处理成Excel文件…

[转]硬核 | Redis 布隆(Bloom Filter)过滤器原理与实战

在Redis 缓存击穿(失效)、缓存穿透、缓存雪崩怎么解决?中我们说到可以使用布隆过滤器避免「缓存穿透」。 码哥,布隆过滤器还能在哪些场景使用呀? 比如我们使用「码哥跳动」开发的「明日头条」APP 看新闻,如…

Senparc.Weixin.Sample.MP源码剖析

Senparc.Weixin.Sample.MP是微信公众号样例的.NET6源码,项目配置文件appsettings.json的修改和微信公众号测试环境的搭建参考:微信公众号调试与Natapp环境搭建。接下来从项目结构,项目应用和项目源码3个角度来进行讲解。一.项目结构角度项目代…