.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. linux mailx 发送邮件到qq邮箱

    POP3/SMTP服务默认是开启的,没开启的点开启 然后点击生成授权码,发送消息,就会给出授权码了 yum install mailx # centos sudo apt-get install he ...

  2. Educational Codeforces Round 110 A-D 题解

      A. Fair Playoff 题目大意:有4个人进行比赛,第一个和第二个比,第三个和第四个比,之后各自的胜者再比,最开始每个人持有一个数字,每场比赛持有数字较大的选手会胜出,问最开始持有数字最大 ...

  3. docker:打包node+npm+pm2运行环境镜像

    最近公司有一个外包项目需要在不能连外网的情况下部署node项目到甲方公司内部.直接使用node官网的安装包可以获得node运行环境,但像pm2这种工具要离线装就会比较费劲,所以最终选择了使用docke ...

  4. Python:lxml

    学习自: python3解析库lxml - Py.qi - 博客园 lxml官方文档 lxml官方文档--lxml中的类.方法使用,如果需要查看某些方法的具体用法,就到这个网页下 python爬虫系列 ...

  5. 如何为k8s中的pod配置QoS等级?

    1.概述 本文介绍如何为pod分配特定的QoS等级. 我们知道,在k8s的环境中,通过使用QoS等级来做决定,在资源紧张的时候,将哪些的pod进行驱逐,或者说如何对pod进行调度. OK,话不多说,让 ...

  6. C# ProgressBar的简单使用

    ProgressBar控件(进度条)用于在win窗体中显示进度,由于它的值会不断更新,为了不让界面假死,一般都是采用多线程的方式对进度条进行管理.有关ProgressBar的理论基础跟详细知识我在这里 ...

  7. 写出Zend 框架的目录结构,简单说明目录作用?

    application/ – 存放应用程序的目录,包括MVC 系统.配置文件.服务以及引导程序(Bootstrap.php)configs/ –配置文件目录.application/modules – ...

  8. egg微信小程序支付(服务商)插件封装

    下单 通过下单获取prepay_id,然后返回给小程序发起支付 若是服务商,mch_id:传入服务的商户号:sub_mch_id:传入子商户的商户号,算法签名的秘钥是服务商的秘钥. 'use stri ...

  9. ArcScene数据与Sketchup数据的交互

    博主给大家介绍一下ArcScene数据与Sketchup数据的交互. 应用软件:ArcGIS10.2.Sketchup.Photoshop (1)利用Google earth影像采集小区主要建筑物.可 ...

  10. 导入导出笔记-easyExcel初探(表格导入和模板化导出)

    前言 本文使用的EasyExcel Alibaba和EasyPoi Apache技术栈分析 EasyExcel Dependency EasyPoi Dependency 1.需求一:表格化需求导入导 ...