.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)的更多相关文章

  1. CSS Architecture & CSS Design Patterns

    CSS Architecture & CSS Design Patterns BEM Block, Element, Modifier https://en.bem.info/methodol ...

  2. Cloud Design Patterns & Architecture Styles

    Cloud Design Patterns Categories Data Management Design and Implementation Messaging Patterns Ambass ...

  3. Cloud Design Patterns: Prescriptive Architecture Guidance for Cloud Applications

    January 2014 Containing twenty-four design patterns and ten related guidance topics, this guide arti ...

  4. 云设计模式-Design patterns for microservices

    云设计模式 https://azure.microsoft.com/zh-cn/blog/design-patterns-for-microservices/ https://www.cnblogs. ...

  5. Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】

    原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...

  6. Apex Design Patterns

    Apex allows you to build just about any custom solution on the Force.com platform. But what are the ...

  7. [Design Patterns] 4. Creation Pattern

    设计模式是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结,使用设计模式的目的是提高代码的可重用性,让代码更容易被他人理解,并保证代码可靠性.它是代码编制真正实现工程化. 四个关键元素 ...

  8. [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 ...

  9. Learning JavaScript Design Patterns The Module Pattern

    The Module Pattern Modules Modules are an integral piece of any robust application's architecture an ...

随机推荐

  1. Mono创始人 Miguel de Icaza今天离开微软

    2016年,微软突然宣布收购移动工具开发商Xamarin,后者是位于美国加利福尼亚,据称微软收购Xamarin交易价格在4亿到5亿美元之间.因此,微软获得了著名的开源倡导者和开发人员Miguel de ...

  2. 哈工大 计算机网络 实验四 利用 Wireshark 进行协议分析

    计算机网络实验代码与文件可见github:计算机网络实验整理 实验名称 利用 Wireshark 进行协议分析 实验目的: 本次实验的主要目的. 熟悉并掌握Wireshark的基本操作,了解网络协议实 ...

  3. C#中?和:?和??代表什么

    ?代表可空类型修饰符    引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空.为了使值类型也可为空,就可以使用可空类型?:带便三元表达式    int a=b>c?b:c 如果 ...

  4. VirtualBox虚拟机-安装增强功能

    virtualbox中win10虚拟机怎么安装增强功能 安装VBoxGuestAdditions增强功能后,可增加以下功能: 鼠标集成: 可以无缝的在宿主机与虚拟机之间移动鼠标. 自适应窗口:可以任意 ...

  5. 路径查找算法应用之A*算法

    环境:Visual Studio 2017 + .Net Framework 4.5 应用场景:在画板上查找起始点和目标点之间的最短最直路径,最后画出连接两个点之间的折线. 算法简介:A*算法是一种性 ...

  6. 使用http-server 模拟接口数据 mock data

    首先创建文件夹 mkdir mockData&&cd mockData 安装http-server npm i http-server 创建数据文件 touch index.json ...

  7. 两个宝藏|关于我在github上冲浪时的一个小技巧。

    你好呀,我是歪歪. 前几天在 github 上冲浪的时候,发现了两个宝藏东西. 我也不藏着掖着了,拿出来给大家分享一下. 这两个宝藏是关于 arthas 和 SOFARegistry 的,这两个东西都 ...

  8. Ansible 使用配置

    1.配置 /etc/ansible/hosts 文件,添加被管控主机ip #vim /etc/ansible/hosts   文件末尾添加组[group1]和被管控主机的IP [group1] 192 ...

  9. EXCEL数据处理-经纬度转换:度分秒转换为小数

    背景:工作中遇见此问题,整理了一下,花点时间随便总结下,希望能帮助到大家! 业务描述:红框内110°10′15"这种格式的经度,我想转换为110.36534这种格式. 步骤: 1.现将110 ...

  10. 马哥教育Linux网络班结业考试(架构师)-简答题题目(附答案)

    1.叙述 centos7 启动图形界面的开机启动流程? 答:新版本的CentOS7里,已经做了调整.具体/etc/inittab 文件的第7行已经做出了说明: 系统已经使用'targets' 取代了运 ...