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原则(上)>,作者: ...
随机推荐
- Android 通知栏Notification的整合 全面学习 (一个DEMO让你全然了解它)
在android的应用层中,涉及到非常多应用框架.比如:Service框架,Activity管理机制,Broadcast机制,对话框框架,标题栏框架,状态栏框架.通知机制,ActionBar框架等等. ...
- cocos2d+TexturePackerGUI动画制作
转载请注明出处:http://blog.csdn.net/oyangyufu/article/details/25168047 程序效果图: 1.下载安装TexturePackerGUI 地址:htt ...
- selenium+python安装配置
一.安装步骤 1.python安装 2.selenium安装 2.1. 方法一:在Windows命令行(cmd)输入pip install selenium即可自动安装selenium,安装完 ...
- Android中build target,minSdkVersion,targetSdkVersion,maxSdkVersion概念区分
问题引入: 有一个下载功能,在Android 5.x设备上运行正常,Android 6.x上运行异常,现象是下载进度卡在0%. 问题排查发现,是sdk的target设置为23导致,修改为21则 ...
- Asp.net mvc 知多少(一)
本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问http:/ ...
- 配置Meld为git的默认比较工具
1. 安装 meld sudo apt-get install meld 2. 创建 git_meld.sh 脚本 cd /bin vim git-meld.sh #!/bin/sh meld $2 ...
- Intellij 如何在新窗口中打开项目
好多程序员都使用intelliJ idea开发项目,由于不小心设置了不在提示打开项目项目方式,所以只能打开一个窗口,而且只能同时打开一个项目,特别郁闷,分享下设置后的效果 工具/原料 Intell ...
- 【功能代码】---3 JS判断字符串是否包含某个字符串
JS判断字符串是否包含某个字符串 var str ="abc"; if(str.indexOf("bc")>-1){ alert('str中包含bc字符串 ...
- Struts2学习---namespace,file模块包含,默认action
我们上一节已经将action基本的配置和使用讲了,接下来我们讲以下struts一些小知识点: namespac: 上一节学习action的时候我们访问我们jsp文件时候使用的: http://loca ...
- [数据结构]C语言链表实现
我学数据结构的时候也是感觉很困难,当我学完后我发现了之所以困难时因为我没有系统的进行学习,而且很多教授都只是注重数据结构思想,而忽略了代码方面,为此我写了这些博文给那些试图自学数据结构的朋友,希望你们 ...