.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. MapReduce中一次reduce方法的调用中key的值不断变化

    简单一句话总结就是:ReduceContextImpl类的RawKeyValueIterator input迭代器对象里面存储中着key-value对的元素, 以及一个只存储value的迭代器,然后每 ...

  2. LeetCode-077-组合

    组合 题目描述:给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合. 你可以按 任何顺序 返回答案. 示例说明请见LeetCode官网. 来源:力扣(LeetCode) 链 ...

  3. 常用的公共 DNS 服务器 IP 地址

    转载自:小哈龙 2019-04-12 09:34:42 公共 DNS 服务器 IP 地址 名称 DNS 服务器 IP 地址 阿里 AliDNS 223.5.5.5 223.6.6.6 CNNIC SD ...

  4. [动态规划] 适合DJ银行的日子

    [动态规划] 适合DJ银行的日子 前言:开始的时候用常规模拟做的超时了,然后看官方题解,大致意思就是连续n天单调可以用动态规划的思想 你和一群强盗准备打劫银行.给你一个下标从 0 开始的整数数组 se ...

  5. ASP.NET Core 6框架揭秘实例演示[26]:跟踪应用接收的每一次请求

    很多人可能对ASP.NET Core框架自身记录的诊断日志并不关心,其实这些日志对纠错排错和性能监控提供了很有用的信息.如果需要创建一个APM(Application Performance Mana ...

  6. 5种常见的Docker Compose错误

    在构建一个容器化应用程序时,开发人员需要一种方法来引导他们正在使用的容器去测试其代码.虽然有几种方法可以做到这一点,但 Docker Compose 是最流行的选择之一.它让你可以轻松指定开发期间要引 ...

  7. java-快捷操作

    crtl+c crtl+v crtl+a crtl+x crtl+x剪切 crtl+z撤销 crtl+s保存 alt+f4关闭窗口 完全删除shift+delet widow+r运行程序 window ...

  8. 网络编程 并发socketserver

    网络编程 并发socketserver ipv4.ipv6 ip协议:规定网络地址的协议 B/S架构 C/S架构 bs是cs的一种 B/S是浏览器和服务端架构 C/S是客户端和服务端架构 osi七层协 ...

  9. 配置jenkins+git+python实现接口自动化持续集成

    1.安装jenkins服务(傻瓜式安装,这里不做描述) 2.windows上访问jenkins地址(http://ip:端口号/),用户名密码登录 3.进入后新建一个job 4.Source Code ...

  10. 解决使用DBeaver连接MySQL时报错-The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone.

    解决使用DBeaver连接MySQL时报错,其实提示很明显. The server time zone value '�й���׼ʱ��' is unrecognized or represents ...