代码也需要有秩序,就像世界需要秩序,基于SOLID architecture principles

一、SOLID原则

  S.O.L.I.D.是一组面对面向对象设计的最佳实践的设计原则。术语来自Robert C.Martin的著作Agile Principles, Patterns, and Practices in C#,代表了下面五个设计原则:

(1)SRP(Single Responsibility Principle): 单一责任原则;

(2)OCP(Open Closed Principle):开放封闭原则;

(3)LSP(Liskov Substitution Principle): 里氏替换原则;

(4)ISP(Interface Segregation Principle): 接口分离原则;

(5)DIP(Dependency Inversion Principle):依赖倒置原则;

二、各原则解析

1、单一职责

简而言之,SRP就是指单个类应该有且仅有单个职能。

2、开放封闭原则

OCP简单来说就是 对扩展是开放的,对修改是封闭的。

3、里氏代换原则

LSP俗语是:“老鼠的儿子会打洞。”,其实就是子类是和父类有相同的行为和状态,是可以完全替换父类的。这也是保护了OCP的开放扩展关闭修改的原则。

4、接口分离原则

接口分离规则旨在使用多个特定功能的接口来避开通用接口造成的富余化。

5、依赖倒置原则

依赖注入解除了对象和对象的依赖关系,需要其他对象,会有外部直接注入,而你自己不需要关心他如何而来。对象符合OCP原则(对外扩展开放,对修改关闭), 容器负责所有关系匹配。在此层,容器便是这个社会的规则,而对象只需要关心自己所完成的一部分。

总结:

Shivprasad koirala 用一句话总结的SOLID总结:

S:SRP, A class should take care of only one responsibility.

O: OCP, Extension should be preferred over modification(修改,修正).

L: LSP, A parent class object should be able to refer child objects seamlessly(无缝地) during runtime polymorphism(多态,多态性).

I: ISP, Client should not be forced to use a interface if it does not need it.

D: DIP, High level modules should not depend on low level modules but should depend on abstraction.

C# 之设计原则的更多相关文章

  1. javascript的api设计原则

    前言 本篇博文来自一次公司内部的前端分享,从多个方面讨论了在设计接口时遵循的原则,总共包含了七个大块.系卤煮自己总结的一些经验和教训.本篇博文同时也参考了其他一些文章,相关地址会在后面贴出来.很难做到 ...

  2. SOLID 设计原则

    SOLID 原则基本概念: 程序设计领域, SOLID (单一功能.开闭原则.里氏替换.接口隔离以及依赖反转)是由罗伯特·C·马丁在21世纪早期 引入的记忆术首字母缩略字,指代了面向对象编程和面向对象 ...

  3. Java程序员应该了解的10个面向对象设计原则

    面向对象设计原则: 是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton.Decorat ...

  4. AngularJS_01之基础概述、设计原则及MVC设计模式

    1.AngularJS: 开源的JS框架,用来开发单一页面应用,以及数据操作频繁的场景:2.设计原则: ①YAGNI原则:You Aren't Gonna Need It! 不要写不需要的代码! ②K ...

  5. UML类图与面向对象设计原则

    1. 引言     从大一开始学习编程,到如今也已经有两年了.从最初学习的Html,Js,JaveSe,再到JavaEE,Android,自己也能写一些玩具.学习过程中也无意识的了解了一些所谓的设计模 ...

  6. SOA 实现:服务设计原则

    http://www.ibm.com/developerworks/cn/webservices/ws-soa-design/ 引言 面向服务的体系结构(Service-Oriented Archit ...

  7. Apple、Google、Microsoft的用户体验设计原则

    轻巧的Apple 注重设计过程: 在设计过程中引入用户交互的5个目标: 了解您的目标客户 分析用户的工作流 构造原型系统 观察用户测试 制定观察用户准则 做出设计决定 避免功能泛滥 80% 方案 优秀 ...

  8. GOTO Berlin: Web API设计原则

    在邮件列表和讨论区中有很多与REST和Web API相关的讨论,下面仅是我个人对这些问题的一些见解,并没有绝对的真理,InnoQ的首席顾问Oliver Wolf在GOTO Berlin大会上开始自己的 ...

  9. Sql Server系列:索引设计原则及优化

    1. 索引设计原则 索引设计不合理或缺少索引都会对数据库的性能造成障碍,高效的索引对于获得良好的性能非常重要. 设计索引时的一些原则: ◊ 索引并不是越多越好,一个表中如果有大量的索引,不仅占用大量的 ...

  10. oop五大设计原则

    一:单一职责原则单一职责有2个含义,一个是避免相同的职责分散到不同的类中,另一个是避免一个类承担太多职责.减少类的耦合,提高类的复用性. 二:接口隔离原则表明客户端不应该被强迫实现一些他们不会使用的接 ...

随机推荐

  1. apache做反向代理服务器

    apache代理分为正向代理和反向代理: 1 正向代理: 客户端无法直接访问外部的web,需要在客户端所在的网络内架设一台代理服务器,客户端通过代理服务器访问外部的web(需要在客户端的浏览器中设置代 ...

  2. 025_lua脚本语言

    一.--cat /opt/nginx/conf/conf.dlua_package_path '/opt/nginx/conf/lua/?.lua;;'; --lua模块路径,其中”;;”表示默认搜索 ...

  3. python 基础 three day

    本节主要内容: 一. python基本数据类型有哪些? 1. int  ==>  整数.主要用来进行数学计算. 2. str ==> 字符串,可以保存少量数据并进行相应的操作 3. boo ...

  4. O(big oh) (big omega) (big theta)

    big oh big omega big theta more

  5. word发布博客

    无向图双连通部件(双连通分量) 关节点和桥边的定义: 双连通部件的性质   每一个双连通部件应该包含至少两个顶点,除非整个无向图只包含一个顶点   如果两个双连通部件包含同一个顶点,那么这个共有的顶点 ...

  6. 34)django-上传文件,图片预览功能实现

    目录 文件上传      1)form表单提交上传(会刷新)      2)ajax上传      3)iframe      4)图片上传预览(思路保存文件的时候,把文件保存文件的路径反馈回,客户端 ...

  7. PID控制器开发笔记之二:积分分离PID控制器的实现

    前面的文章中,我们已经讲述了PID控制器的实现,包括位置型PID控制器和增量型PID控制器.但这个实现只是最基本的实现,并没有考虑任何的干扰情况.在本节及后续的一些章节,我们就来讨论一下经典PID控制 ...

  8. 配置一个 Confluence 6 环境

    本部分对你 Confluence 的外部设置进行描述.包括有如何配置 Web 服务器,应用服务器,目录和文件等信息—— Confluence 运行所需要的所有环境.有关在服务器内部对配置进行修改的内容 ...

  9. Confluence 6 log4j 日志级别

    日志级别 DEBUG - 被设计为用来获得最多的信息和事件,在对应用程序进行调试的时候,这个日志级别通常能够提供最多的有效信息(查看应用程序怎么了) INFO - 有关系统正常运行-计划任务运行,服务 ...

  10. Confluence 6 从站点首页集中访问面板

    如果你选择设置一个页面为你的站点主页面,但是你还是希望你的用户能够访问 Confluence 的主面板,你可以将主面板的连接添加到应用导航(Application Navigator)中. 希望添加 ...