.NET Best Practices: Architecture & Design Patterns (5 Days Training)
.NET Best Practices: Architecture & Design Patterns (5 Days Training)
.NET最佳实践:架构及设计模式
5天培训课程
课程大纲
熟悉的原则
SOLID原则
当软件开发第一次出现时。 想要开始发展的人显然没有知识储备。 因此,每个人都开始运用自己的方式来编写软件。 SOLID原则由Robert C. Martin(又名Bob叔叔)于2000年引入。这些原则的目的是使软件设计更易懂,更易于维护和扩展。 这些原则对于每个开发人员来说都是必不可少的,因为它将帮助他们编写更好的代码,更好地理解考虑了这些原则编写的其他代码。
- S (The Single Responsibility Principle) - 单一责任原则
- O (The Open Closed Principle) - 开放封闭原则
- L (Liskov Substitution Principle) - 里氏替换原则
- I (The Interface Segregation Principle) - 接口分离原则
- D (The Dependency Inversion Principle) - 依赖倒置原则
使用依赖注入实现更松散的耦合
在编写代码时,必须确保没有引入对其他对象的不必要的依赖关系。 依赖关系从长远来看只会使您付出代价,因为它们更难以维护,不易于测试,可交换等。 如果需要依赖什么,则依赖于接口。 接口描述了相关性,但不强制执行。 现在,您不希望这些依赖项被硬编码填充,这就是依赖关系注入(DI)可以为您提供帮助的地方。 依赖注入可以在运行时动态地帮助您确定要插入依赖的实现。
- 什么是紧密耦合,如何防止呢?
- 使用控制反转(IoC)容器。
- 构造函数和属性注入。
- 以
Microsoft.Extensions.DependencyInjection为例。
设计模式
模式介绍
你可能不相信,但是设计模式在软件体系结构中是找不到起源的。 模式是由真正的"砖头和石头"建筑师于1970年代首次描述的。模式被定义为对常见类型问题的可重用解决方案,而无需重复解决方案的实际实现方式。 这意味着模式是理想的学习工具,也是传达设计思想的理想工具。 当然也有反模式,这是经常使用的东西,但实际上最好避免。
- 什么是模式?
- 四人帮:Erich Gamma,Ralph Johnson,Richard Helm和John Vlissides。
- 不同种类的设计模式:创造模式、结构模式和行为模式。
- 模式无处不在:实现、设计和架构模式之间的区别...
- 什么时候应用模式,什么时候不应用。
- 一些反模式。
创造模式
在创建软件时,您会感到自己不断在创建新对象。 尽管创建新对象的基本形式还不错,但是它可能导致设计问题或增加设计的复杂性。 创建模式将帮助您处理适合这种情况的对象创建。
- 单例模式(Singleton)- 又名Pluto模式以及.NET运行时如何帮助实现它
- 建造者模式(Builder) - 将构造与表示分离
- 工厂方法模式(Factory Method) - 将对象的创建委托/隐藏到工厂
- 抽象工厂模式(Abstract Factory) - 抽象工厂以创建对象族
行为模式
创建对象后,它们开始交互。当您不小心时,这些交互会很快开始导致紧密耦合的代码。行为设计模式有助于识别对象之间的常见通信模式并实现这些模式。通过正确应用这些模式,可以提高执行对象之间交互的灵活性。
- 模板方法模式(Template Method)- 将算法的确切部分推迟到继承类,委托,...
- 策略模式(Strategy)- 没有烦人的继承的模板方法
- 责任链模式(Chain of Responsibility)- 贯穿战略链的战略
- 状态模式(State)- 使用无状态库将状态依赖逻辑延迟到状态类,状态机
- 迭代器模式(Iterator)- 提供浏览集合的通用方法,yield是您的朋友,异步迭代集合
- 观察者模式(Observer)- 通知谁对您要说的内容感兴趣,事件与委托
- 中介者模式(Mediator)- 在彼此不知道的对象之间提供双向通信,正确实现
INotifyPropertyChanged - 游客模式(Visitor)
结构模式
创建的对象往往不会独立存在。 不,它们开始封装试图在其中创建结构的其他对象,否则将是混乱的软件环境。 结构模式有助于识别和建立对象之间的关系。
- 适配器模式(Adapter)- 将不适合的其他对象插入代码中
- 装饰器模式(Decorator)- 在调用者未意识到的情况下更改对象的行为
- 复合模式(Composite)- 树形结构在这里可以帮助您使用Linq Expressions
- 门户模式(Facade)- 向调用者隐藏子系统的复杂性
- 享元模式(Flyweight)- 通过防止不必要的对象创建来减少内存消耗
- 代理模式(Proxy)- 在不更改行为的情况下代理对主题的请求
用某些模式构建自己的小编程语言-好玩!
编程语言在其实现中还使用了一堆模式。 在本章中,您将构建自己的小编程语言,该语言可以进行扩展。 在这样做的同时,您会发现并应用一些非常重要的模式,这些模式在构建编程语言的范围之外是完全可以使用的!
- 解释器模式(Interpreter):建立自己的表达语言语法并执行。
- LINQ如何使用解释器 - 以及您如何自己使用它。
- 构建自己的解释器以进行简单的数学运算。
- 建造者模式(Builder):隐藏如何构建复杂的对象层次结构-并允许变化。
- XAML是最终的构建器。
- 反射模式:实现自己的构建器的理想.NET方法。
- 如何不使用反射。
- 访客模式:当您需要对同一对象结构进行许多不同的操作时。
- 使用Visitor构建pretty-printer。
- 动态地实现访客。
Model-View-**
大多数开发人员都是糟糕的图形设计师。这就是为什么我们看到模式的出现,这些模式允许开发人员专注于编写代码来实现应用程序的行为,同时允许图形设计人员构建辅助用户界面。主要模式称为Model-View-* 根据您使用的技术替换了*。了解MVW模式非常重要,因为它可用于开发Windows和Web应用程序。
- Model-View-Controller:一种古老的时尚模式。
- ASP.NET MVC-简介。
- WPF中的MVVM-MVC利用强大的数据绑定功能。
- 命令:将行为封装在对象中。
- 使用闭包实现命令。
反应式(Reactive)编程
您听说过反应式编程吗?这是一项重要的新开发,您可以在其中学习如何使用Observables进行编程。您将学习如何使用这种技术来解决经典的面向对象编程中一些常见的难以解决的问题,并且我们还将探索Redux模式。
- 什么是可观测值(Observables)?
- 使用反应性(Reactive)扩展。
- 应用Redux模式可以简化复杂的应用程序。
单元测试
.NET中的单元测试
每个开发人员的梦想:有效的可维护代码。您如何保持代码的可维护性?以及如何确保一些小的更改不会破坏您的代码?单元测试可以营救!
- 每个开发人员想要的是:有效的质量代码;并继续工作。
- 查找错误:不仅是代码。 - 或者说,美国宇航局如何损失了125.000.000美元的火星探测器。
- 什么是单元测试?什么是好的单元测试?
- 了解单元测试和集成测试之间的区别。
- 测试驱动开发-您应该这样做吗?
- 角色扮演:Marge,Homer和Bart
- 单元测试的Triple-A-与此有什么关系?
使用Visual Studio进行单元测试
在本章中,我们将研究使用Visual Studio的内置功能构建单元测试。
- MSUnit-内置到Visual Studio中
- 使用MSUnit构建和运行单元测试。
- 使用测试浏览器窗口
框架建设
应用的设计模式:开发自己的可重用库。
什么时候最需要图案?当您自己构建框架时。建立框架意味着在保持向后兼容性的同时处理新功能。正确使用模式可以使这项非常艰巨的任务变得容易。因此,在培训的最后一部分中,我们将构建一个可重用的库,同时遇到一些问题,然后通过应用正确的模式解决这些问题。
- 将GoF命令模式添加到MVVM。
- 使用接口以提高灵活性。
- 构建命令对象-扩展WPF的ICommand接口。
- 将撤消和重做功能添加到命令模式。
- 使用CommandManager类。
- 挑战:无需大量更改即可将我们的命令改装为MVVM。
- 使用Memento模式实现撤消重做。
- 选择是否添加原型模式。
- 有关如何继续执行命令模式的想法。
.NET Best Practices: Architecture & Design Patterns (5 Days Training)的更多相关文章
- CSS Architecture & CSS Design Patterns
CSS Architecture & CSS Design Patterns BEM Block, Element, Modifier https://en.bem.info/methodol ...
- Cloud Design Patterns & Architecture Styles
Cloud Design Patterns Categories Data Management Design and Implementation Messaging Patterns Ambass ...
- Cloud Design Patterns: Prescriptive Architecture Guidance for Cloud Applications
January 2014 Containing twenty-four design patterns and ten related guidance topics, this guide arti ...
- 云设计模式-Design patterns for microservices
云设计模式 https://azure.microsoft.com/zh-cn/blog/design-patterns-for-microservices/ https://www.cnblogs. ...
- Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】
原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...
- Apex Design Patterns
Apex allows you to build just about any custom solution on the Force.com platform. But what are the ...
- [Design Patterns] 4. Creation Pattern
设计模式是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结,使用设计模式的目的是提高代码的可重用性,让代码更容易被他人理解,并保证代码可靠性.它是代码编制真正实现工程化. 四个关键元素 ...
- [Design Patterns] 1. Primary concept & term - UML
It's time to review design patterns, especially when I reach the turning-point of my career. That's ...
- Learning JavaScript Design Patterns The Module Pattern
The Module Pattern Modules Modules are an integral piece of any robust application's architecture an ...
随机推荐
- JAVA——运算符
目录 运算符 1.算术运算符 练习题: 2.关系运算符(比较运算符) 3.逻辑运算符 3.1&& 和 & 使用区别 3.2|| 和 | 使用区别 3.3 取反 基本规则 3.4 ...
- JZ-061-序列化二叉树
序列化二叉树 题目描述 请实现两个函数,分别用来序列化和反序列化二叉树. 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存. 序 ...
- LeetCode-026-删除有序数组中的重复项
删除有序数组中的重复项 题目描述:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度. 不要使用额外的数组空间,你必须在 原地 修改输入数组 ...
- 前端工程化:使用 shelljs 生成 yapi 接口文件
之前的文章介绍了使用 yapi-to-typescript (下文简称 ytt)生成接口类型定义文件,方便我们直接使用接口的请求和响应类型,能减少很多写接口类型的时间. 使用 yapi-to-type ...
- matlab图形中添加文本框
图形中添加文本框,自己目前了解到了两种方法:1.用legend函数就可以对图形标注,形成一个文本框: 2.就是用annotation('textbox',[0.2,0.2.0.1,0.3],'Line ...
- php 原生分页
<?php // 连接数据库 $link = mysqli_connect("127.0.0.1", "root", "root", ...
- java下载镜像
镜像地址 https://repo.huaweicloud.com/java/jdk/ 如果你不知道选择哪个版本就点击下面这个链接吧 https://repo.huaweicloud.com/java ...
- html2canvas滚动截图
滚动截图 项目需求要进行动态的滚动截图搜索一下发现html2canvas可以实现截图,但是滚动截图网上搜罗了一遍发现不是很完善所以记录下 首先npm一下安装依赖: npm install html2c ...
- CF1106F题解
居然没人写常系数齐次线性递推/jy 题意明确. 首先我们注意到这个系数是在幂上面的,这道题的各种信息都是建立在乘法上的,十分不好处理,考虑求一个 \(\ln\) 将这些信息建立在加法上. \[\ln ...
- 《Shader入门精要》中MVP变换的Projection矩阵与《GAMES101图形学入门》中的区别
game101的透视投影的投影矩阵是这样的 正交投影是这样的 而shader入门精要的透视投影矩阵是这样子 正交投影矩阵是这样子 game101的透视投影是这样得到的 而正交投影的时候并没有假设中心点 ...