3.2 依赖的哲学

3.2.1 本质诠释

“不要调用我们,我们会调用你”

3.2.2 什么是依赖,什么是抽象

“耦合是不可避免的”


(1)什么是依赖和耦合

依赖阐释耦合,耦合量化依赖程度。

依赖角度:

  • 无依赖,
  • 单项依赖,
  • 双向依赖

耦合角度:

  • 零耦合,没有依赖。
  • 具体耦合,一个类持有另一个具体类引用。
  • 抽象耦合,发生具体类和抽象类的依赖,最大作用通过对抽象依赖,应用多态,实现灵活扩展性和稳定性。

设计的目标:高内聚,低耦合
低耦合:代表了实现最简单的依赖关系,尽可能地减少类与类、模块与模块、层次与层次、系统与系统之间的联系;

(实现单向依赖,实现抽象的耦合,都是实现低耦合的基础条件。)

高内聚:一方面代表了职责的统一管理,一方面又代表了关系的有效隔离;


(2)关于抽象和具体

抽象 -> 能被具体层复用和覆写 -> 稳定性
具体 -> 体现系统动态性和变动性 -> 变动性

3.2.3 重新回到依赖倒置

依赖于抽象,对接口编程,对抽象编程!

3.2.4 IOC与DI

1.控制反转(IOC),代码的控制器交由系统控制而不是在代码内部,消除组件或模块间的直接依赖;
2.依赖注入(DI):

  1. 接口注入
  2. 构造器注入
  3. 属性注入
  4. .NET平台下,Attribute实现注入。

《必须知道.NET》3.OO之美相关推荐

  1. OO 之美:设计的分寸

    本节将介绍以下内容: 设计的由来 浅谈重构 设计的分寸 引言 有了前面两章"OO 大智慧"和"OO 大原则"的铺垫,相信读者已经有了对面向对象的基本认知.而本章 ...

  2. OO之美:好代码和坏代码

    本节将介绍以下内容: 编码的规范 面向对象指导 引言 好的代码,是练出来的.坏的代码,是惯出来的. 那么,代码是写给计算机的吗?不是,代码其实是写给人的.Martin Fowler说:任何一个傻瓜都可 ...

  3. OO之美:依赖的哲学

    依赖的哲学 本节将介绍以下内容: 关于依赖和耦合 面向抽象编程 依赖倒置原则 控制反转 依赖注入 工厂模式 Unity框架应用 引言 "不要调用我们,我们会调用你"是对DIP最形象 ...

  4. 面向对象设计与构造第一次总结作业

    第一次作业--多项式计算 ---结构分析 第一次作业我只使用了两个类,正像下面的类图所表示的那样,分别是Poly和ComputePoly.Poly类是不可变的,能保存一个多项式,可以进行加.减运算.C ...

  5. Webscalesql代码浏览记录

    浏览了下webscalesql 的代码.目前包含的62个commit分类如下. 目前还没有能够体现"webscale"特征的代码,不过从roadmap上看,fb回头会继续把一些大动 ...

  6. C#刨根究底:《你必须知道的.NET》读书笔记系列

    一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP-王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...

  7. 你必须知道的.NET(第2版)

      王涛 编著 ISBN 978-7-121-14128-7   2011年7月出版 定价:79.00元 16开 548页 宣传语:以深入浅出的笔法,触摸.NET底层和框架的有趣角落,了解.NET平台 ...

  8. php smarty 原理,php模板原理PHP模板引擎smarty模板原理浅谈

    mvc是开发中的一个伟大的思想,使得开发代码有了更加清晰的层次,让代码分为了三层各施其职.无论是对代码的编写以及后期的阅读和维护,都提供了很大的便利. 我们在php开发中,视图层view是不允许有ph ...

  9. (轉貼) 美電腦工程師改寫遊戲軟體向女友求婚成功 (News)

    Abstract 美國一名電腦程式工程師改寫女友最喜歡的電腦遊戲程式,在遊戲中向女友求婚,結果不僅抱得美人歸,還贏得遊戲發明公司的獎勵. Introduction轉貼自http://news.pcho ...

最新文章

  1. AEC、AGC、ANS在视音频会议中的作用?
  2. poj 3255 Roadblocks (SPFA)
  3. python换成中文版_在python中如何将“\”替换为“/”?
  4. Spring【AOP模块】就是这么简单
  5. 小熊的人生回忆(三)
  6. [原创]java WEB学习笔记54:Struts2学习之路--- 编写Struts2 的第一个程序,HelloWord,简述 package ,action,result...
  7. mysql数据库在工控自动化应用_robotframework自动化系列:操作mysql数据库
  8. asp.net整体运行机制详解
  9. 频率对电感值和电感尺寸的影响 // 《精通开关电源设计》P50:频率对电感值和电感尺寸的影响
  10. 文档多人协同编辑底层算法是如何实现的?
  11. 盘点——iOS应用开发常用工具
  12. 分布式服务器中的数据安全问题及其解决办法
  13. matlab画入射系数和透射系数,反射系数和透射系数.ppt
  14. AttributeError: module ‘torch‘ has no attribute ‘inference_mode‘
  15. Android Studio往模拟器添加音乐
  16. php 手机号归属地 dat,GitHub - china-qd/phonedata: 手机号码归属地信息库、手机号归属地查询 phone.dat 最后更新:2020年04月...
  17. SS端加密以及obfs混淆推荐
  18. 弱网测试学习记录(1)
  19. 【萌新初学者】CodeWars战地笔记(JavaScript)
  20. 2012中兴软件笔试 回忆录

热门文章

  1. 【果断收藏】16个经典面试问题及回答思路
  2. 更改 Office 解决方案的安装路径
  3. 查看驱动安装错误日志
  4. django admin 登陆快速添加验证码功能
  5. OSChina 周六乱弹 ——属于程序员的情话
  6. MongoDB的选举过程
  7. 广播中等待较久出现anr问题
  8. 浏览器用户用滤镜实现网页的翻转效果
  9. 问题三十六:ray tracing中的Inverse Mapping(3)——圆盘Inverse Mapping
  10. Java最全思维导图知识汇总