《.NET应用架构设计:原则、模式与实践》新书博客-2.1.1-设计原则简述

简介:



2  模式、设计原则和方法

 
    在软件世界中,我们在不断地解决着各种问题,其中有些问题前人已经总结出了解决的方法和经验,而这些方法和经验则形成了我们所熟知的模式。本章主要讲述在面向对象设计中可以采用的一些设计模式、设计原则,以及企业架构模式。在开发过程中,如果正确采用了模式和原则,可以快速解决和分解复杂的问题,从而开发出更加漂亮的软件系统。
 
    本章涉及的内容非常多,比如设计原则、设计模式、企业应用架构模式和软件设计方法等,而且这些内容都是软件开发与设计中的重点和难点,每一点都足够写一本厚厚的专著。本书的目的不是要详细讲解这些内容,而是要在它们的基础上讲解如何正确地进行软件的架构与设计。
 
    阅读本书的大部分读者可能对上面这些知识都有一定程度的了解,为了方便那些还不太了解的读者能顺利阅读本书后面的内容,本章将首先会快速介绍软件的设计原则和设计模式,以便为学习后续的内容打下基础,同时会在实战案例中详细地阐述设计模式的思想,希望能引导大家真正地领悟设计模式,之后再系统地介绍了企业应用架构模式和常用的软件设计方法。
 
    通过本章的学习,基础还不太好的读者将会对软件的设计原则、模式和方法有一个宏观的认识,如果要系统地学习这些知识,可以阅读本书推荐的相关资料。
 
 
2.1  设计原则与软件设计
 
众所周知,设计原则是设计模式的基石。当遵循设计原则的时候,写出的代码就会变得非常灵活,并且可以应对变化,也更加容易维护。当然,也不是那么绝对。下面首先会简要介绍一些基本的设计原则,然后再介绍Robert C. MartinS.O.L.I.D原则。
 
2.1.1  设计原则简述
 
KISS原则(Keep It Simple Stupid
 
软件开发中常常遇到的问题就是:把一个问题过度的复杂化。KISS原则的目的就是提倡在设计和编码中,尽量保持代码的简约,避免不必要的复杂。简约不等于简单。
 
DRY原则(Don’t Repeat Yourself
DRY原则的目的就是:抽取系统中的公共部分,并把它放置在一个地方以避免重复。这个原则不只是适用于代码中,而且也可以用于功能和业务逻辑上,确保不重复。这就要求对系统的职能有良好的分割,每个功能之间有着清晰的界限,用例之间不存在交叉。
 
TellDon’tAsk
 
这个原则是与封装有关的,要求对代码进行合理的封装,并把它们放到正确的类中。同时这个原则也指出:必须明确告诉对象:我们想要它们去执行什么样的操作,而不是首先询问对象的状态,然后我们自己决定去执行什么操作。
 
YAGNI原则(You Ain’tGonna Need It
YAGNI原则指出:系统中只包含所必须的功能,不要包含你认为将来可能会用到的功能或者特性,防止过度设计。这个原则在TDD中体现得比较完全。在TDD中,首先写出代表系统必须功能的测试用例,然后再实现系统的功能代码,然后进行测试,直至测试代码通过。
 
SoC原则(Separation Of Concerns
SoC就是把一个软件功能分离为单独功能点。被分离的每个功能点有唯一的行为和数据,而且每个功能点都能够被其他所需要的类单独使用。通过这个原则,我们可以最大限度地实现代码重用、功能重用、模块重用。
 
讲述了一些基本的设计原则之后,再来看看Bob在《敏捷软件开发设计》 [1] 一书中提到的五个原则,简称S.O.L.I.D原则。
 
S.O.L.I.D原则融合了基本的原则,并且提出了更加具有可操作性的方法。
 
SRPSingle Responsibility Principle 
 
单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。如果一个类承担的职责过多,就等于把这些职责都耦合在一起了。一个职责的变化可能会削弱或抑制这个类完成其他职责的能力。这个原则,不仅仅适用于类的设计上,还适用于接口以及模块的设计上。
 
OCPOpen-Closed Principle
 
开放-封闭原则:软件实体(类,模块等)应该是可以扩展的,但是不可修改。只有在设计和开发中遵守OCP原则,才能避免在新加功能之后产生连锁反应。OCP关注的是灵活性:功能的改动是通过增加代码进行的,而不是修改现有的代码。一般来说,OCP是通过融合ISP(接口分离原则)和创建抽象来隔离后面同类型的变化的,LSP(里氏替换原则)使得这个目标成为可能。
 
LSPLiskov Substitution Principle
 
里氏替换原则:子类型必须能够替换掉它们的基类型。
 
ISPInterface Segregation Principle
 
接口分离原则:不应该强迫类实现它不需要的方法。如果一个接口中包含了很多不大而且不相关的方法,那么这个接口就必须要被分组,然后分离成多个接口,让实现接口的类只是去实现它所需要的方法。同时这也体现了在设计中,要尽量遵从SRP(单一职责原则)。
 
DIPDependency Inversion Principle
 
依赖倒置原则:高层的模块不应该依赖于低层的模块,二者都应该依赖于抽象;抽象不应该依赖于细节,细节应该依赖于抽象。高层模块是指系统不经常发生变化的部分,是一个系统区别于其他系统的重要标志,它包含了系统的策略选择与业务模型。低层模块是指系统中经常发生变化的部分。
上面讲了一些设计原则,下面就来举例说明一下,加深对这些原则的思考。
 
    京东地址: http://book.360buy.com/10893935.html
    卓越地址: http://www.amazon.cn/mn/dp/B006NS2N0S




















本文转自yanyangtian51CTO博客,原文链接:http://blog.51cto.com/yanyangtian/754128  ,如需转载请自行联系原作者



相关文章
|
2月前
|
存储 Shell Linux
快速上手基于 BaGet 的脚本自动化构建 .net 应用打包
本文介绍了如何使用脚本自动化构建 `.net` 应用的 `nuget` 包并推送到指定服务仓库。首先概述了 `BaGet`——一个开源、轻量级且高性能的 `NuGet` 服务器,支持多种存储后端及配置选项。接着详细描述了 `BaGet` 的安装、配置及使用方法,并提供了 `PowerShell` 和 `Bash` 脚本实例,用于自动化推送 `.nupkg` 文件。最后总结了 `BaGet` 的优势及其在实际部署中的便捷性。
105 10
|
3月前
|
数据库 开发者
.NET 异步编程之谜:async/await 模式究竟隐藏着怎样的神奇力量?
【8月更文挑战第28天】在当今注重效率和响应性的软件开发领域,.NET 的 async/await 模式如同得力助手,简化异步代码编写,使代码更易理解和维护。通过后台执行耗时操作,如网络请求和数据库查询,避免阻塞主线程,显著提升系统响应性。此模式不仅适用于网络请求,还广泛应用于数据库操作和文件读写。合理使用 async/await 可大幅优化性能,但需注意避免过度使用、正确处理调用链及异常,以确保系统稳定性和高效性。深入探索 async/await,助您构建更出色的应用程序。
47 0
|
4天前
|
运维 Cloud Native 持续交付
云原生架构下的微服务设计原则与实践####
【10月更文挑战第20天】 本文深入探讨了云原生环境中微服务设计的几大核心原则,包括服务的细粒度划分、无状态性、独立部署、自动化管理及容错机制。通过分析这些原则背后的技术逻辑与业务价值,结合具体案例,展示了如何在现代云平台上实现高效、灵活且可扩展的微服务架构,以应对快速变化的市场需求和技术挑战。 ####
23 7
|
4天前
|
Kubernetes Cloud Native 持续交付
云原生架构下的微服务设计原则与最佳实践##
在数字化转型的浪潮中,云原生技术以其高效、灵活和可扩展的特性成为企业IT架构转型的首选。本文深入探讨了云原生架构的核心理念,聚焦于微服务设计的关键原则与实施策略,旨在为开发者提供一套系统性的方法论,以应对复杂多变的业务需求和技术挑战。通过分析真实案例,揭示了如何有效利用容器化、持续集成/持续部署(CI/CD)、服务网格等关键技术,构建高性能、易维护的云原生应用。文章还强调了文化与组织变革在云原生转型过程中的重要性,为企业顺利过渡到云原生时代提供了宝贵的见解。 ##
|
4天前
|
JSON 算法 安全
JWT Bearer 认证在 .NET Core 中的应用
【10月更文挑战第30天】JWT(JSON Web Token)是一种开放标准,用于在各方之间安全传输信息。它由头部、载荷和签名三部分组成,用于在用户和服务器之间传递声明。JWT Bearer 认证是一种基于令牌的认证方式,客户端在请求头中包含 JWT 令牌,服务器验证令牌的有效性后授权用户访问资源。在 .NET Core 中,通过安装 `Microsoft.AspNetCore.Authentication.JwtBearer` 包并配置认证服务,可以实现 JWT Bearer 认证。具体步骤包括安装 NuGet 包、配置认证服务、启用认证中间件、生成 JWT 令牌以及在控制器中使用认证信息
|
2月前
|
监控 Cloud Native 持续交付
云原生时代的微服务架构设计原则与实践
【9月更文挑战第27天】本文深入探讨了在云原生环境下,如何高效地实施微服务架构。通过分析微服务的基本概念、设计原则和关键技术,结合实际案例,指导读者理解并应用微服务架构于云计算项目之中。文章旨在为软件开发者和架构师提供一条清晰的路径,以实现更加灵活、可扩展且易于维护的系统。
|
14天前
|
网络协议 大数据 网络架构
桥接模式和NET模式的区别
桥接模式和NET模式的区别
27 0
|
17天前
|
开发框架 缓存 算法
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
|
2月前
|
数据采集 JSON API
.NET 3.5 中 HttpWebRequest 的核心用法及应用
【9月更文挑战第7天】在.NET 3.5环境下,HttpWebRequest 类是处理HTTP请求的一个核心组件,它封装了HTTP协议的细节,使得开发者可以方便地发送HTTP请求并接收响应。本文将详细介绍HttpWebRequest的核心用法及其实战应用。
96 6
|
24天前
|
Cloud Native API C#
.NET云原生应用实践(一):从搭建项目框架结构开始
.NET云原生应用实践(一):从搭建项目框架结构开始

热门文章

最新文章