DIP: Dependency Inversion Principle 依赖倒转原则

高层次组件不应该依赖于低层次组件,二者均应该依赖于接口。
抽象不应该依赖于细节,细节应该依赖于抽象。

IOC:Inversion Of Control 控制反转

核心:底层模块是通过基于依赖倒置原则的类型的构造函数注入的。

伪代码:

public class FinanceInfoService
{
// 通过构造函数注入依赖。外部组件的解析放在模块外部进行
// 例如,使用控制反转Ioc框架 IFinder _finder = null;
IRenderer _renderer = null; //构造函数 (注入依赖)
public FinanceInfoService(IFinder finder, IRenderer renderer)
{
_finder = finder;
_renderer = renderer;
} public string GetQuotesAsHtml(string symbols)
{
//获取Finder组件
if(_finder == null)
{
throw new NullReferenceException("Invalid finder.");
} //获取原始数据
StockInfo[] stocks = _finder.FindQuoteInfo(symbols); //获取Render组件
if(_render == null)
{
throw new NullReferenceException("Invalid renderer.");
} //将原始数据呈现为HTML
return _renderer.RenderQuoteInfo(stocks);
} ... }

  

摘自:Microsoft .Net 企业级应用架构设计

Ioc思想的更多相关文章

  1. 使用工厂模式解耦和IoC思想

    使用工厂模式解耦. 一.需求场景: 某一层功能需要改动,但其他层代码不变 实现类1:MyDaoImpl查询自己的数据库. ====改为====> 实现类2:MyDaoImpl2从其它地址得到数据 ...

  2. Spring IOC(控制反转)思想笔记

    Spring IOC(控制反转)思想笔记 IOC控制反转基本理念就是将程序控制权从程序员手中交给用户自定义,从而避免了因为用户一个小需求的变化使得程序员需要改动大量代码. 案例 如果按照之前javaw ...

  3. Spring核心思想Ioc和Aop (面试)

    Spring核心思想Ioc和Aop (面试) 注意: Ioc和Aop并不是Spring提出的,在Spring之前就已经存在,Spring只是在技术层面给这两个思想做了非常好的实现. 1 Ioc 1.1 ...

  4. 【调侃】IOC前世今生

    前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...

  5. DIP原则、IoC以及DI

    一.DIP原则 高层模块不应该依赖于底层模块,二者都应该依赖于抽象. 抽象不应该依赖于细节,细节应该依赖于抽象. 该原则理解起来稍微有点抽象,我们可以将该原则通俗的理解为:"依赖于抽象&qu ...

  6. Spring学习笔记--环境搭建和初步理解IOC

    Spring框架是一个轻量级的框架,不依赖容器就能够运行,像重量级的框架EJB框架就必须运行在JBoss等支持EJB的容器中,核心思想是IOC,AOP,Spring能够协同Struts,hiberna ...

  7. 深入理解IoC/DI

    ------------------------------------------------------------------------ 理解IoC/DI 1.控制反转 --> 谁控制谁 ...

  8. DI依赖注入/IOC控制反转

    DI依赖注入# 啥都不说,直接上代码 <?php class UserController { private $user; function __construct(UserModel $us ...

  9. WEB核心IOC篇

    ioc概念的理解:(不是技术是一种设计思想) IOC (控制反转)     IoC(Inverse of Control)的字面意思是 控制反转 ,它包括两个内容:     其一是控制 (控制对象的实 ...

随机推荐

  1. Python Flask Web 框架入门

    Python Flask 目录 本文主要借鉴 letiantian 的文章 http://www.letiantian.me/learn-flask/ 一.简介 二.安装 三.初始化Flask 四.获 ...

  2. SQL Server 添加描述

    添加描述的格式 exec sys.sp_addextendedproperty @name = N'MS_Description' ,@value = 'value',@level0type=N'SC ...

  3. vue商品详情页添加动画(eg)

    <template> <div class="food" transition="move"></div> </tem ...

  4. 用 python 写一个模拟玩家移动的示例

    实例:二维矢量模拟玩家移动 在游戏中,一般使用二维矢量保存玩家的位置,使用矢量计算可以计算出玩家移动的位置,下面的 demo 中,首先实现二维矢量对象,接着构造玩家对象,最后使用矢量对象和玩家对象共同 ...

  5. 洛谷P1010 幂次方

    题目描述 任何一个正整数都可以用2的幂次方表示.例如 137=2^7+2^3+2^0 同时约定方次用括号来表示,即a^b 可表示为a(b). 由此可知,137137可表示为: 2(7)+2(3)+2( ...

  6. [C++ STL] set使用详解

    一.set介绍: set容器内的元素会被自动排序,set与map不同,set中的元素即是键值又是实值,set不允许两个元素有相同的键值.不能通过set的迭代器去修改set元素,原因是修改元素会破坏se ...

  7. ACM_物品分堆(01背包)

    物品分堆 Time Limit: 2000/1000ms (Java/Others) Problem Description: 有n个物品,物品i的重量为Wi,现在想要把这个n个物品分类两堆,求最小的 ...

  8. NodeJs学习记录(二)win7下 配置node连接oracle的环境

    2017/01/23 星期一 前言:还没看几眼教程,就开始分配任务,涉及到连oracle数据库,所以顺便把整个环境的配置放上来 安装文件清单(1).node-v6.9.1-x64.msi(2).pyt ...

  9. Jmeter各组件介绍 及 使用

    本篇主要讲述Jmeter的各个组件及简单使用,其中包括以下内容: 一.线程组二.逻辑控制器三.配置元件四.定时器五.后置处理器六.断言七.监听器 八.参数化 网上大神整理的链接:http://blog ...

  10. 微信关于网页授权access_token和普通access_token的区别

    微信官网网址:https://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html#.E9.99.84.EF.BC.9A.E6. ...