自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(101)
  • 收藏
  • 关注

原创 2022年 VsCode 之 Vue 代码智能提示插件

3.x安装 Vue 3 Snippets 如下图。2.x安装 Vue 2 Snippets 如下图。分为 2.x版和3.x版 在。

2022-12-01 11:11:05 12415

原创 .Net6 之 asp.net core webapi Swagger 版本控制及接口注释说明

ApiExplorerSettings(GroupName =nameof(ApiVersionInfo.接口版本V1))][ApiExplorerSettings(GroupName =nameof(ApiVersionInfo.接口版本V2))]上图 是 v1版本下的接口,如果需要 v2中有 接口数据 ,需要返回 第二步 在其他控制器上 定义。第一步 首先 在 控制器上 和 每个接口方法 上 添加 注释 如图。第二步:规定 控制属于 哪个 版本。第二步 :打开项目的.csproj文件加上 添加。

2022-11-11 17:00:47 3083 2

原创 C# 设计模式 行为型模式 之 状态模式

2、枚举可能的状态,在枚举状态之前需要确定状态种类。3、将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。3、状态模式对"开闭原则"的支持并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态,而且修改某个状态类的行为也需修改对应类的源代码。在状态模式中,类的行为是基于它的状态改变的。在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。

2022-10-31 00:55:23 311

原创 C# 设计模式 行为型模式 之 访问者模式

在访问者模式中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。1、具体元素对访问者公布细节,违反了迪米特原则。2、具体元素变更比较困难。3、违反了依赖倒置原则,依赖了具体类,没有依赖抽象。您在朋友家做客,您是访问者,朋友接受您的访问,您通过朋友的描述,然后对朋友的描述做出一个判断,这就是访问者模式。1、符合单一职责原则。

2022-10-30 22:12:27 160

原创 C# 设计模式 行为型模式 之 策略模式

在策略模式 中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。1、算法可以自由切换。2、避免使用多重条件判断。旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。2、所有策略类都需要对外暴露。

2022-10-30 21:15:08 194

原创 C# 设计模式 行为型模式 之 备忘录模式

如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。备忘录模式 保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。

2022-10-30 20:56:37 117

原创 C# 设计模式 行为型模式 之 责任链模式

责任链模式 为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。它将请求的发送者和接收者解耦。通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任。2、系统性能将受到一定影响,而且在进行代码调试时不太方便,可能会造成循环调用。3、可能不容易观察运行时的特征,有碍于除错。总结:最高等级的,可以调用 下属的 所有 子。

2022-10-30 20:26:19 117

原创 C# 设计模式 行为型模式 之 中介者模式

中介者模式 是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。1、降低了类的复杂度,将一对多转化成了一对一。2、各个类之间的解耦。3、符合迪米特原则。MVC 框架,其中C(控制器)就是 M(模型)和 V(视图)的中介者。中介者会庞大,变得复杂难以维护。

2022-10-30 19:28:01 172

原创 C# 设计模式 行为型模式 之 解释器模式

解释器模式 提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。1、可利用场景比较少。2、对于复杂的文法比较难维护。3、解释器模式会引起类膨胀。1、可扩展性比较好,灵活。2、增加了新的解释表达式的方式。3、易于实现简单文法。总结:提供抽象 表达式 并提供参数,实现类 传参 然后比较 表达式 提供的 参数。

2022-10-30 19:02:30 146

原创 C# 设计模式 行为型模式 之 观察者模式

1、如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。2、如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。3、观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。当对象间存在一对多关系时,则使用观察者模式。比如,当一个对象被修改时,则会自动通知依赖它的对象并。1、观察者和被观察者是抽象耦合的。拍卖的时候,拍卖师观察最高标价,然后通知给其他。观察者模式属于行为型模式。

2022-10-30 17:34:39 115

原创 C# 设计模式 行为型模式 之 迭代器模式

由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。1、访问一个聚合对象的内容而无须暴露它的内部表示。2、需要为聚合对象提供多种遍历方式。3、为遍历不同的聚合结构提供一个统一的接口。迭代器模式是非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式属于行为型模式。它支持以不同的方式遍历一个聚合对象。总结:遍历(聚合)集合数据。下面示例 演示 迭代器模式。

2022-10-30 15:43:59 130

原创 C# 设计模式 行为型模式 之 命令模式

命令模式 是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。总结:命令工厂 负责 添加命令(对象) 执行命令(对象)或批量执行命令(对象)1、降低了系统耦合度。2、新的命令可以很容易添加到系统中去。使用命令模式可能会导致某些系统有过多的具体命令类。下面以 代码形式 展示 命令模式。

2022-10-30 14:46:16 89

原创 C# 设计模式 行为型模式 之 模板模式

在模板模式中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。1、封装不变部分,扩展可变部分。2、提取公共代码,便于维护。3、行为由父类控制,子类实现。每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。有一些通用的方法,将这些通用算法抽象出来。

2022-10-30 00:10:48 184

原创 C# 设计模式 结构型模式 之 代理模式

1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。在代理模式中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。简单来讲:就像Windows 里面的快捷方式。通过 代码 实现 代理模式。

2022-10-29 22:36:00 93

原创 C# 设计模式 结构型模式 之 享元模式

这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。提高了系统的复杂度,需要分离出外部状态和内部状态,而且外部状态具有固有化的性质,不应该随着内部状态的变化而变化,否则会造成系统的混乱。在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。大大减少对象的创建,降低系统的内存,使效率提高。

2022-10-29 22:10:43 112

原创 C# 设计模式 结构型模式 之 外观模式

外观模式 隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。1、去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。

2022-10-29 21:16:20 77

原创 C# 设计模式 结构型模式 之 组合模式

组合模式又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。该类提供了修改相同对象组的方式。

2022-10-29 20:41:08 241

原创 C# 设计模式 结构型模式 之 装饰器模式

装饰器模式 允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。下面实例演示装饰器模式的用法。其中,把一个形状装饰上不同的颜色,同时又不改变形状类。在不想增加很多子类的情况下扩展类。

2022-10-29 19:53:33 429

原创 C# 设计模式 结构型模式 之 桥接模式

桥接是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。总结 利用桥接 做到 实现类 与 接口定义类 解耦,互不依赖,独立存在。

2022-10-29 18:58:59 106

原创 C# 设计模式 结构型模式 之 适配器模式

1、过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。适配器模式是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。应用场景:读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。2、提高了类的复用。

2022-10-29 16:55:24 169

原创 C# 设计模式 创建型模式 之 原型模式

1、配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。2、必须实现 ICloneable 接口。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建。当直接创建对象的代价比较大时,则采用这种模式。原型模式是通过拷贝一个现有对象生成新对象的。应用实例: 细胞分裂(案例)原型模式 是用于创建。

2022-10-29 15:31:59 58

原创 C# 设计模式 创建型模式 之 工厂模式

工厂模式是最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。主要解决接口选择的问题。每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。场景: 您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。下面 代码实现 工厂模式。

2022-10-29 14:11:13 642

原创 C# 设计模式 创建型模式 之 建造者模式

主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。一些基本部件不会变,而其组合经常变化的时候。比如:去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套餐。建造者模式 使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。2、如内部变化复杂,会有很多的建造类。

2022-10-29 00:02:51 410

原创 C# 设计模式 创建型模式 之 抽象工厂模式

抽象工厂模式是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。 缺点:产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 工厂 里加代码,又要在具体的里面加代码

2022-10-28 22:13:04 138

原创 C# 设计模式 创建型模式 之 单例模式

在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。如何绕过常规的构造器,提供一种机制来保证一个类只创建一个实例?这应该是类设计者的责任,而不是类使用者的责任。以上代码在单线程情况下不会出现任何问题。但是在多线程的情况下却不是安全的。下面通过 代码的实现 解释下,如何 实现。第一种:单线程 实现 单例模式。第二种:多线程 实现 单例模式。第三种:静态 实现 单例模式。

2022-10-28 20:42:04 250

原创 C# 设计模式 之 创建型模式、结构型模式、行为型模式概述

结构型模式涉及到如何组合类和对象以获得更大的结构。结构型类模式采用继承机制来组合接口或实现;结构型对象模式描述如何对一组对象进行组合从而实现新功能的一些方法。行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。根据目的、用途的不同,分为创建型模式、结构型模式、行为型模式。创建型模式主要用于创建对象。

2022-10-28 17:54:11 158

原创 C# 设计原则 之 合成复用 原则

组合关系:也是整体与部分的关系,但部分不能离开整体而单独存在,这种关系比聚合更强,是一种稳定的包含关系。整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在。聚合关系:是整体与部分的关系,且部分可以离开整体而单独存在,是一种不稳定的包含关系,它们有各自独立的生命周期;例如:公司和员工的关系,公司包含员工,但如果公司倒闭,员工依然可以换公司上班。合成复用原则 又叫组合/聚合复用原则。代码体现:通常将一个类的对象作为另一个类的成员变量来实现组合关系,与聚合相同,只能从语义级别来区分。

2022-10-28 16:35:52 191

原创 C# 设计原则 之 迪米特 原则

问题产出一:如果上面的 ComputerShutDown类 是一个别人写的模块,并且有几十种 方法,而且关机 业务顺序 不能 随便填写,必须 安装 规则一步一步才能 正常关机,比如 必须先关程序,在关显示器,在关电源,这种规则 才能 正常关机。如果 你拿到这块代码是 别人写的模块,你如果不知道顺序,并且方法很多,可能就会无法下手 编写代码。在ComputerShutDown类中 提供一个直接 关机 的方法,此方法 由编写ComputerShutDown类的人进行封装,对外提供,其他方法 封闭。

2022-10-28 15:10:13 165

原创 C# 设计原则 之 接口分离 原则

2解决方法就需要把 IMessage接口模块 在做细分,分为 学生和教师,学生类和教师类分别继承IMessageTeacher和IMessageStudent。下面例程就是对于上面问题的解决,从而实现 接口分离 原则。接口分离 原则 就是 为了对 接口的 进一步 细分,实现 低耦合,比如 公司 中的,各个部门,如财务,销售,技术 等,都是为了 低耦合 设计的。1.3如果有个学生类 需要继承此 模块接口,就有问题了,学生类需要实现模块中每个接口,但是 学生只能有 查询成绩 与打印成绩的权限。

2022-10-28 14:21:18 481

原创 C# 设计原则 之 里氏代换 原则

3 当子类覆盖或实现父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。4 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。1 子类必须完全实现父类的抽象方法,但不能覆盖父类的非抽象方法。里氏代换原则:任何基类可以出现的地方,子类一定可以出现。5 子类的实例可以替代任何父类的实例,但反之不成立。2 子类可以实现自己特有的方法。

2022-10-28 13:45:56 491

原创 C# 设计原则 之 依赖倒置 原则

依赖倒置原则 是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。1.2中文歌曲 实现 歌曲抽象类。1.3英文歌曲 实现 歌曲抽象类。1.1创建歌曲 抽象 类。

2022-10-27 23:54:46 349

原创 C# 设计原则 之 开放封闭 原则

根据客户 需求而定,客户需求只有 存钱和取钱,如有其他业务 可进行扩展。也就是说,对扩展是开放的,而对修改是封闭的。对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。1.2存钱的需求 实现 银行的业务接口1.1。1.3取钱的需求 实现 银行的业务接口1.1。2.2存钱的需求 实现 客户需求接口类2.1。2.3取钱的需求 实现 客户需求接口类2.1。银行柜台 接待客户,接受 用户的操作。

2022-10-27 22:24:42 490

原创 C# 设计原则 之 单一职责 原则

定义 功能 方法,不实现任何 逻辑代码,要使用 接口方法调用。特点:在需要 修改PhoneFun.cs类的功能时,只需要修改 继承自 接口实现类就好,PhoneFun.cs此类只做 增加功能。例如:需要对 PhoneFun.cs 类模块 进行 单一职责 设计,此类模块包含了对 PhoneFun相关的功能的方法:比如 1.打电话,2.发短信。3.下面 进行 模块PhoneFun.cs类的 单一职责 模式设计:需要 以 功能接口 的形式 创建私有字段。5.1挂电话实现类 需要继承挂电话接口类。

2022-10-27 18:38:26 607

原创 C# 设计思想 之 高内聚 与 低耦合

例如:插板和充电器,我有手机充电器,电视充电器,和烧水壶充电器,但是不管哪个充电器坏掉都不影响 其他充电器的使用,相反,如果插板坏掉,只要换掉 插板就好,也不影响其他 充电器使用。模块一般 小到一个方法、一个接口、一个类、大到一个业务、一个功能、一个系统都是 模块。总结就是需要 归类,一个模块中需要集中自己相关的事务,不要 有额外的其他事务。例如,一个用户类:包括,用户登录、修改密码、用户注册、退出登录、等等。例如,一个文章类:包括,文章发表、修改文章、文章统计、等等。、等等 这种就表示为。

2022-10-27 14:34:05 335

原创 asp.net core MVC 异常捕获 并自定义 异常页面

() 用于 程序内部异常 可以捕获 异常页面中的 路径 错误消息 堆栈消息 等。>() 用于404异常 可以捕获 异常页面中的 路径 和 URL参数。一般 可以同时开启两个。同时 捕获404异常和 程序内部的异常。

2022-10-22 23:19:38 366

原创 asp.net core MVC 上传单文件与多文件

4.构造函数 注入 IWebHostEnvironment 用于获取 asp.net core MVC WebRootPath(网站根目录) 本机的wwwroot路径。2.修改 第3步 前端视图 增加。最后 需要在 form表单添加。3.前端视图 添加前端代码,属性,支持多文件上传。

2022-10-22 16:33:53 1180 1

原创 asp.net core EF Core 添加种子数据

使用方法 需要 在 MYdbcontext 中的 重载 OnModelCreating 方法中。另一种 添加种子数据 方法: 可以考虑使用 扩展方法,为了 解耦,方便管理。1.建立 ExtensionModelBuilder.cs文件,内容 如下。EF Core 种子数据 就是 为 数据库添加 初始数据。

2022-10-21 22:51:22 972

原创 asp.net core EF Core 注册MYdbcontext遇到问题

需要在 MYdbcontext中 添加 构造函数,并且以 DbContextOptions 作为参数 并继承 base。如果需要 在Program.cs 配置中 配置 依赖注入 MYdbcontext 服务。整个项目中 其他 地方 都可以通过 构造函数 依赖注入 从而调用。推荐使用 AddDbContextPool 提高性能。

2022-10-21 22:15:51 433

原创 asp.net core MVC 模型验证

等,会直接把 模型类 的 英文名称 展示在 前端页面中,那么就需要 在 每个模型实体的 属性上 加上。使用方法,需要在 控制器方法中 使用 ModelState.IsValid。如果验证通过 返回true。这里 只是做一个对asp.net core MVC模型验证的额外补充。MVC模型验证 基本的使用方法和 笔者的以前的文章 使用方法 相同。在MVC视图页面中 如果 在前端中直接 使用。模型验证使用,参考笔者 写过的文章。并且支持 Enum等。

2022-10-21 16:59:34 353

原创 asp.net core MVC TagHelpers

如果改成这个 路由 普通前端 代码会报错,而使用TagHelpers 就不要 修改 任何 代码,并且直接匹配路由。源代码 是 普通 前端写法,场景:更改路由,那么普通 前端的写法 就会导致 找不到页面,并且报错,如果使用 TagHelpers的写法 就不必修改 前端页面 直接 匹配路由。} 普通前端 代码 只能匹配 这个条路由,如果路由改变,那么成千上万前端代码都需要 更改。2.简单场景 使用 拿a标签做演示。

2022-10-21 14:42:28 282

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除