《必须知道.NET》3.OO之美
3.2 依赖的哲学
3.2.1 本质诠释
“不要调用我们,我们会调用你”
3.2.2 什么是依赖,什么是抽象
“耦合是不可避免的”
(1)什么是依赖和耦合
依赖阐释耦合,耦合量化依赖程度。
依赖角度:
- 无依赖,
- 单项依赖,
- 双向依赖
耦合角度:
- 零耦合,没有依赖。
- 具体耦合,一个类持有另一个具体类引用。
- 抽象耦合,发生具体类和抽象类的依赖,最大作用通过对抽象依赖,应用多态,实现灵活扩展性和稳定性。
设计的目标:高内聚,低耦合
。
低耦合:代表了实现最简单的依赖关系,尽可能地减少类与类、模块与模块、层次与层次、系统与系统之间的联系;
(实现单向依赖,实现抽象的耦合,都是实现低耦合的基础条件。)
高内聚:一方面代表了职责的统一管理,一方面又代表了关系的有效隔离;
(2)关于抽象和具体
抽象 -> 能被具体层复用和覆写 -> 稳定性
具体 -> 体现系统动态性和变动性 -> 变动性
3.2.3 重新回到依赖倒置
依赖于抽象,对接口编程,对抽象编程!
3.2.4 IOC与DI
1.控制反转(IOC),代码的控制器交由系统控制而不是在代码内部,消除组件或模块间的直接依赖;
2.依赖注入(DI):
- 接口注入
- 构造器注入
- 属性注入
- .NET平台下,Attribute实现注入。
《必须知道.NET》3.OO之美相关推荐
- OO 之美:设计的分寸
本节将介绍以下内容: 设计的由来 浅谈重构 设计的分寸 引言 有了前面两章"OO 大智慧"和"OO 大原则"的铺垫,相信读者已经有了对面向对象的基本认知.而本章 ...
- OO之美:好代码和坏代码
本节将介绍以下内容: 编码的规范 面向对象指导 引言 好的代码,是练出来的.坏的代码,是惯出来的. 那么,代码是写给计算机的吗?不是,代码其实是写给人的.Martin Fowler说:任何一个傻瓜都可 ...
- OO之美:依赖的哲学
依赖的哲学 本节将介绍以下内容: 关于依赖和耦合 面向抽象编程 依赖倒置原则 控制反转 依赖注入 工厂模式 Unity框架应用 引言 "不要调用我们,我们会调用你"是对DIP最形象 ...
- 面向对象设计与构造第一次总结作业
第一次作业--多项式计算 ---结构分析 第一次作业我只使用了两个类,正像下面的类图所表示的那样,分别是Poly和ComputePoly.Poly类是不可变的,能保存一个多项式,可以进行加.减运算.C ...
- Webscalesql代码浏览记录
浏览了下webscalesql 的代码.目前包含的62个commit分类如下. 目前还没有能够体现"webscale"特征的代码,不过从roadmap上看,fb回头会继续把一些大动 ...
- C#刨根究底:《你必须知道的.NET》读书笔记系列
一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP-王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...
- 你必须知道的.NET(第2版)
王涛 编著 ISBN 978-7-121-14128-7 2011年7月出版 定价:79.00元 16开 548页 宣传语:以深入浅出的笔法,触摸.NET底层和框架的有趣角落,了解.NET平台 ...
- php smarty 原理,php模板原理PHP模板引擎smarty模板原理浅谈
mvc是开发中的一个伟大的思想,使得开发代码有了更加清晰的层次,让代码分为了三层各施其职.无论是对代码的编写以及后期的阅读和维护,都提供了很大的便利. 我们在php开发中,视图层view是不允许有ph ...
- (轉貼) 美電腦工程師改寫遊戲軟體向女友求婚成功 (News)
Abstract 美國一名電腦程式工程師改寫女友最喜歡的電腦遊戲程式,在遊戲中向女友求婚,結果不僅抱得美人歸,還贏得遊戲發明公司的獎勵. Introduction轉貼自http://news.pcho ...
最新文章
- AEC、AGC、ANS在视音频会议中的作用?
- poj 3255 Roadblocks (SPFA)
- python换成中文版_在python中如何将“\”替换为“/”?
- Spring【AOP模块】就是这么简单
- 小熊的人生回忆(三)
- [原创]java WEB学习笔记54:Struts2学习之路--- 编写Struts2 的第一个程序,HelloWord,简述 package ,action,result...
- mysql数据库在工控自动化应用_robotframework自动化系列:操作mysql数据库
- asp.net整体运行机制详解
- 频率对电感值和电感尺寸的影响 // 《精通开关电源设计》P50:频率对电感值和电感尺寸的影响
- 文档多人协同编辑底层算法是如何实现的?
- 盘点——iOS应用开发常用工具
- 分布式服务器中的数据安全问题及其解决办法
- matlab画入射系数和透射系数,反射系数和透射系数.ppt
- AttributeError: module ‘torch‘ has no attribute ‘inference_mode‘
- Android Studio往模拟器添加音乐
- php 手机号归属地 dat,GitHub - china-qd/phonedata: 手机号码归属地信息库、手机号归属地查询 phone.dat 最后更新:2020年04月...
- SS端加密以及obfs混淆推荐
- 弱网测试学习记录(1)
- 【萌新初学者】CodeWars战地笔记(JavaScript)
- 2012中兴软件笔试 回忆录