ASP.NET 设计模式:设计模式和原则简述
设计模式的概念
设计模式是高层次的、抽象的解决方案模板。可以将这些模式视为解决方案的蓝本而不是解决方案本身。通常是通过重构自己的代码并将问题泛化来实现设计模式。
软件设计中常见的模式大体分为三类:
- 创建型模式:处理对象构造和引用
- 结构型模式:处理对象之间的关系以及它们之间如何进行交互以形成更大的复杂对象。
- 行为型模式:处理对象之间的通信,特别是职责和算法方面。
各模式简介:




模式对于软件设计和开发而言至关重要,通过共享的词汇来表达思想。具备设计模式牢固知识的团队,沟通起来更有效、顺畅,而不必拘泥于底层实现的细节。
设计模式的使用价值在于它们是可靠的、经过验证的解决方案。设计模式的宗旨就是重用解决方案,避免一次又一次的做重复的工作。
但是设计模式并非银弹,即不是所有的问题都需要或可以用设计模式来解决。这是一把双刃剑,用得好可以把复杂的问题简单化,用不好简单的问题也会被复杂化,所以重点是对于要解决的问题的思考,将问题泛化(形成一种解决问题的套路),而不是拿着设计模式硬往代码上套。
设计原则
设计原则是设计模式的基础,遵循经过验证的设计原则,自己的代码会更加灵活、更具有适应性和可维护性。以下为常见的设计原则
- 简约原则(KISS):该原则的目标就是让代码保持简洁但不要过于简陋,避免引入任何不必要的复杂度。
- 不要重复自己(DRY):将公用的部分抽离出来放在一个单独的地方,避免在系统中重复出现。这个原则不仅仅书的是代码,还包括系统中重复的任何逻辑。
- 讲述而不要询问(Tell,Don't Ask):应该告诉对象您希望他们执行什么动作,而不是询问有关该对象状态的问题然后由您决定希望执行什么动作。这个原则有助于匹配职责并避免类之间的耦合。
- 您不需要它(YAGNI):指的是只需要将应用程序必须的功能包含进来,而不要试图添加任何您觉得可能需要的功能。
- 分离关注点(SoC):将软件分解为多项不同的功能,每项功能封装了可供其他类使用的唯一行为和数据。将程序划分成若干独立职责的做法显著提高了代码的重用程度、维护性和可测试性。
S.O.L.I.D设计原则
S.O.L.I.D设计原则是一组针对面向对象设计的最佳实践。
- 单一职责原则(SRP):该原则与SoC原则很相似,要求每个类有且只有发生变化的原因。
- 开放封闭原则(OCP):要求类对于扩展应该是开放的,对于修改应该是封闭的,这样可以在不改变类的内部行为的情况下添加新功能并扩展类。
- 里氏替换原则(LSP):子类必须可替代它的基类。
- 接口分离原则(ISP):使用相同接口的类只需要实现特定的一组方法,而不是实现一个大而全的单体方法接口。
- 依赖倒置原则(DIP):将自己编写的类与具体的实现隔离开来,让这些类依赖于抽象或接口,即面向接口编程。降低代码的耦合度,提高系统灵活性。
- 依赖注入(DI)和控制反转(IoC)原则:与DIP紧密相关的是DI原则和IoC原则。DI通过构造器、方法和属性来提供底层类或从属类。配合使用DI原则,这些从属类可以被反转为接口或者抽象类,从而达到代码松耦合的效果。在IoC原则中,系统的控制流与过程式编程方法相比是反转的。通过IoC容器将服务注入到客户端代码,而不必让客户端代码指定具体的实现。所谓控制反转指的是客户端获取服务的行为。
《ASP.NET 设计模式》
ASP.NET 设计模式:设计模式和原则简述的更多相关文章
- 设计模式之六大原则——接口隔离原则(ISP)
设计模式之六大原则——接口隔离原则(ISP) 转载于:http://www.cnblogs.com/muzongyan/archive/2010/08/04/1792528.html 接口隔离原则 ...
- GOF业务场景的设计模式-----设计模式六大原则
单一职责原则(Single Responsibility Principle) 定义:不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责. 问题由来:类T负责两个不同的职责:职责P1, ...
- 设计模式——依赖倒置原则实例(PHP实现)
<?php /** * 设计模式--依赖倒置原则实例 * Created by DannyWang * jue.wang@yulore.com * 2015-05-05 */ abstract ...
- Java 设计模式(二)-六大原则
Java 设计模式(二)-六大原则 单一职责原则(Single Responsibility Principle) 定义: 不要存在多余一个原因导致类变更,既一个类只负责一项职责. 问题由来: 当类A ...
- [.net 面向对象程序设计深入](13)实战设计模式——设计模式使用场景及原则
[.net 面向对象程序设计深入](13)实战设计模式——设计模式使用场景及原则 1,什么是设计模式? 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计 ...
- C++ 设计模式 依赖倒置原则 简单示例
C++ 设计模式 依赖倒置原则 简单示例 /** * 依赖倒置原则(Dependency Inversion Principle) * 依赖于抽象(接口),不要依赖具体的实现(类),也就是针对接口编程 ...
- C++ 设计模式 开放封闭原则 简单示例
C++ 设计模式 开放封闭原则 简单示例 开放封闭原则(Open Closed Principle)描述 符合开放封闭原则的模块都有两个主要特性: 1. 它们 "面向扩展开放(Open Fo ...
- C#之设计模式之六大原则(转载)
设计模式之六大原则(转载) 关于设计模式的六大设计原则的资料网上很多,但是很多地方解释地都太过于笼统化,我也找了很多资料来看,发现CSDN上有几篇关于设计模式的六大原则讲述的比较通俗易懂,因此转载过来 ...
- [.net 面向对象程序设计深入](18)实战设计模式——设计模式使用场景及原则
[.net 面向对象程序设计深入](18)实战设计模式——设计模式使用场景及原则 1,什么是设计模式? 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计 ...
- 实践GoF的23种设计模式:SOLID原则(上)
摘要:本文以我们日常开发中经常碰到的一些技术/问题/场景作为切入点,示范如何运用设计模式来完成相关的实现. 本文分享自华为云社区<实践GoF的23种设计模式:SOLID原则(上)>,作者: ...
随机推荐
- hdoj 1285 确定比赛名次 【拓扑排序】
确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 卡尔曼滤波(Kalman Filter)
一.引言 以下我们引用文献[1]中的一段话作为本文的開始: 想象你在黄昏时分看着一仅仅小鸟飞行穿过浓密的丛林.你仅仅能隐隐约约.断断续续地瞥见小鸟运动的闪现.你试图努力地猜測小鸟在哪里以及下一时刻它会 ...
- gcc 源代码分析-前端篇3
3. GCC怎样函表示一个函数 对c语言来说.函数是其核心,全部的东西都在环绕着函数在转.对于一个函数来说.它基本的一些特性例如以下: 1. 有一个返回值,在这里我们没有把返回值的函数觉得它 ...
- iOS开发 字符串的转化 小技巧
/字典或者数组转化为nsstring NSArray *arr = [NSArray arrayWithObject:@"1"]; NSString *str = [arr JSO ...
- 修改文件系统属性chattr,查看文件系统属性lsattr
chattr chattr +i 文件或目录 , chattr +a 文件或目录,chattr -i 文件或目录,chattr -a 文件或目录,chattr =i 文件或目录,chattr =a 文 ...
- sqlserver 存储过程 增加
CREATE PROCEDURE [dbo].[InsertMessage]( @strTable varchar(), --表名 @strValues nvarchar(), --要插入的数据(用英 ...
- iOS知识点、面试题 之三
最近面试,发现这些题 还不错,与大家分享一下,分三文给大家: 当然Xcode新版本区别,以及iOS新特性 Xcode8 和iOS 10 在之前文章有发过,感兴趣的可以查阅: http://www.cn ...
- 对Spring与SpringMVC的理解
Spring 在我的Spring --简介及环境搭建跑通Hello提到关于Spring的基本结构与功能 SpringMVC 先上一张SpringMVC的流程图 Spring MVC 是一个模型 - 视 ...
- [array] leetcode - 48. Rotate Image - Medium
leetcode - 48. Rotate Image - Medium descrition You are given an n x n 2D matrix representing an ima ...
- 一个两年java程序猿的2017个人总结
前言 又到了一年中最后的日子了,相信有不少公司要求员工写年度总结了,我也不例外.不过个人感觉在公司的写个年度总结来说,过于模板化了.其实很多没有必要.总之,本篇的个人总结,是按照个人的想法写的.简而言 ...