C#程序设计的6大原则
设计模式:
面向对象语言开发过程中,遇到各种场景和问题,解决方案和思路沉淀下来,就是设计模式。俗称,套路
设计模式的六大原则:
理解为面向对象语言开发过程中推荐的一些指导性的原则,通俗的说是套路的 套路
1.单一职责原则(Single Reponsibility Principle,简称:SRP)
一个类只负责一件事。一个方法也应该只做一件事。
好处:
- 阅读简单,易于维护
- 扩展升级,减少修改,直接增加类
- 代码重用
建议:简单-稳定-强大
成本:类变多了,上端需要了解更多的类。衡量着使用,如果类相对稳定,而且逻辑简单扩展少,违背单一原则也没关系。
一个类,不要让它太累了。如果不同的职责,总是一起变化的,这种一定要分开。
- 方法层面:方法多个分支,还可能扩展,最好拆分为多个方法
- 接口层面:也会把不同的功能接口,独立开来
- 类库层面:把项目拆分为多个类库,重用-方便维护
- 项目:很多人都是一个web来解决所有问题。
2.里氏替换原则(Liskov Substitution Principle,简称:LSP。)
任何使用基类的地方,都可以透明的使用其子类。
继承:通过继承,子类拥有父类的一切属性和行为,任何父类出现的地方,都可以用子类代替
- 子类必须完全实现父类有的方法,如果子类没有父类的某项东西,就断掉继承
- 子类可以有父类没有的东西,所以子类出现的地方,不一定能用父类来替代
- 透明,就是安全,父类的东西换成子类后不影响程序
1>建议:父类已经实现的东西,不要去隐藏(使用new);
2>父类已经实现的东西,如果想修改,使用virtual+override,避免踩雷
变量,参数,属性,字段,最好都是基于基类的。
3.迪米特法则(Law of Demeter,简称:LOD ):最少知道原则,一个对象应该对其他对象保持最少的了解。
面向对象的单位是类,类与类之间交互,组成功能模块,产生系统。
追求:高内聚,低耦合。通俗理解为高度封装,类与类之间减少依赖。
4.依赖倒置原则(Dependence Inversion Principle,简称:DIP)
- 定义:高层模块不应该依赖底层模块,二者应该通过抽象依赖。通俗讲,依赖抽象,而不是依赖细节,面向抽象编程。23种设计模式,80%跟这个有关
- 依赖细节:程序写死了,不方便扩展
- 依赖抽象:更具有通用性,而且具备扩展性。系统架构基于抽象来搭建的,会更稳定、更具备扩展性。
- 面向抽象编程:底层模块尽量都有抽象类/接口,声明参数/变量/属性的时候,尽量都是 接口/抽象类
注意:如果项目不考虑扩展,确实不需要依赖倒置。
5.接口隔离原则(Interface Segregation Principe,简称:ISP)
定义:
- 客户端不应该依赖,它不需要的接口
- 通俗的理解,一个类对另外一个类的依赖应该建立在最小接口上
- 通俗的理解,实现一个接口的时候,只需要自己必须的功能
6.开闭原则(Open Closed Principle,简称:OCP)
- 对扩展开放,对修改封闭。通俗的讲,如果有功能扩展变化的需求,希望是增加类而不是修改
- 原则的原则,五大原则是手段,这个是目标。这个只是告诉你目标,实现靠其他原则。
- 因为修改会影响原有功能,引入错误。增加类就不会影响原有的东西
总结:如果要升级一个功能,优先级排序
修改(修改类)---增加方法(修改类)---增加类---新增加新的dll
C#程序设计的6大原则的更多相关文章
- 优秀API设计的十大原则
优秀API设计的十大原则 2015-09-23 分类:编程开发.设计模式.首页精华暂无人评论 分享到:更多4 二十万年薪PHP工程师培养计划 成为被疯抢的Android牛人 风中叶讲Java重难 ...
- 第二章 OO大原则
昨天忙了一天,晚上加班到了12点,虽然工作有时候比较累,但是整体来讲还是比较轻松的,国企加上我是今年才毕业的应届生,导致了现在这种情况.工资也真的不算高...但我觉得最开始还是要踏踏实实一点比较好.学 ...
- Atitit 提升进度的大原则与方法 高层方法 attilax总结
Atitit 提升进度的大原则与方法 高层方法 attilax总结 生产力的提升点 1.1. 管理,管理的发展发展非常缓慢,1 1.2. 方法论(前后分离,dsl等)1 1.3. 工具( 工具链 ...
- Atitit 快速开发的推荐技术标准化 规范 大原则
Atitit 快速开发的推荐技术标准化 规范 大原则 1. 如何评估什么样的技术适合快速开发??1 1.1. (重要)判断语言层次..层次越高开发效率越高 4gl dsl> 3.5gl &g ...
- Java设计模式的6大原则
Java设计模式的6大原则 1.开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭.在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果.简单来 ...
- 处理人际关系的5大原则zz
人际关系题是结构化面试当中重要的题型之一,人们常用两个“70%”来形容人际关系的重要性: 人际关系题主要考察考生不同人际关系间的适应性.人际合作的主动性.处理人际关系的原则性和灵活性以及对组织中权属关 ...
- Spring框架4大原则和主要功能
Spring框架4大原则: 使用POJO进行轻量级和最小侵入式开发 POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJ ...
- [设计模式](转)Java中的24种设计模式与7大原则
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- 6大原则java
1.开闭原则(Open Close Principle)定义:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 开放-封闭原则的意思就是说,你设计的时候,时刻要考虑,尽量让这个类是足够好 ...
随机推荐
- 详解计算miou的代码以及混淆矩阵的意义
详解计算miou的代码以及混淆矩阵的意义 miou的定义 ''' Mean Intersection over Union(MIoU,均交并比):为语义分割的标准度量.其计算两个集合的交集和并集之比. ...
- 那些年你啃过的ConcurrentHashMap
前言 我是fancy,一个年纪轻轻bug量就累计到3200个的程序员,同事们都夸我一个人养活了整个测试组. 最近迷上了并发编程.并发这玩意怎么说呢,就是你平时工作用不到,一用就用在面试上.这不,又卷起 ...
- 116_Power Pivot 先进先出原则库龄库存计算相关
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一背景 前面写过了一个关于进销存的案例,留一个话题就是先进先出的库存计算. 刚好有朋友提了相关这样的需求.先来看看效果. ...
- DOM标签操作与事件与jQuery查找标签
目录 DOM之操作标签 创建标签对象 标签对象的属性 innerText与innerHTML 标签内部追加内容 属性操作 事件 常用事件 事件绑定 事件案例 jQuery简介 查找标签 基本选择器 属 ...
- vue新手入门之使用vue框架搭建用户登录注册案例,手动搭建webpack+Vue项目(附源码,图文详解,亲测有效)
前言 本篇随笔主要写了手动搭建一个webpack+Vue项目,掌握相关loader的安装与使用,包括css-loader.style-loader.vue-loader.url-loader.sass ...
- CF1682F MCMF?
题意: 费用流,其实bushi 给你长为\(n\)的序列\(a\),\(b\).\(a\)单增,\(b\)有正有负. \(q\)次询问\([l,r]\),保证\(\sum\limits_{i=l}^r ...
- boost::bind 不能处理函数重载 (error: no matching function for call to 'bind')
前言 最近任务多.工期紧,没有时间更新博客,就水一期吧.虽然是水,也不能太失水准,刚好最近工作中遇到一个 boost::bind 的问题,花费了半天时间来定位解决,就说说它吧. 问题背景 项目中使用了 ...
- autohotkey(AHK)实现箭头映射
起因 在主力本上使用了AHK实现alt ijkl的箭头映射,在另一个本子上怎么都不习惯,于是网上找教程,找了半天... 因为大家习惯了快捷键都不一样,为了避免以后浪费时间,因此开此文记录. 操作 ht ...
- Flink整合面向用户的数据流SDKs/API(Flink关于弃用Dataset API的论述)
动机 Flink提供了三种主要的sdk/API来编写程序:Table API/SQL.DataStream API和DataSet API.我们认为这个API太多了,建议弃用DataSet API,而 ...
- Java - ConcurrentHashMap的原理
Java - ConcurrentHashMap的原理 **这是JDK1.7的实现** ConcurrentHashMap 类中包含两个静态内部类 HashEntry 和 Segment. HashE ...