php 設計模式 控制反轉,關于設計模式:控制反轉究竟是什么

本問題已經有最佳答案,請猛點這里訪問。

Possible Duplicate:

What is Inversion of Control?

我知道依賴注入(DI)是什么(我想!).基本上是滿足對象可能具有的依賴關系。我試著想想當使用DI作為面向服務的時候我寫的代碼,我把我的代碼定義為使用其他服務。

然而,我現在想知道,在使用IOC時,我們到底是在改變對什么的控制。這是一個相當模糊的術語,可能意味著一些事情。

但是,我認為創建由IOC框架處理的對象(并因此滿足使用DI的依賴性)是有責任的。

應用程序仍然有責任要求它使用的對象(即服務),區別在于它不知道(或不關心)如何創建它。那么,為什么服務定位器被認為是反模式的,如果它所做的一切都是請求服務?

我說得對嗎?或者是其他什么意思。另外,我是否正確地將DI和IOC的職責分開了?如果我有一個IOC框架,就不能在沒有DI框架的情況下運行。或者DI只是IOC框架的一個特性?

看:什么是控制反轉?另請參見:為什么我需要一個IOC容器而不是直接的DI代碼?

我認為你提供的第一個鏈接回答問題的方式不對

依賴注入通常意味著將依賴對象作為參數傳遞給方法,而不是讓方法創建依賴對象。它在實踐中的含義是,方法不直接依賴于特定的實現;任何滿足需求的實現都可以作為參數傳遞。

控制反轉只認識到依賴關系是反轉的。A不是通過創建、實現或直接調用B來依賴B,而是接收B作為參數,并且不再以任何方式對B負責。

將參數類型實現為接口簡化了過程,并將其概括,但這并不是嚴格必要的。

控制反轉是一種普遍的模式。依賴注入就是這種模式的一種用法。有關更多信息,本文由MartinFowler撰寫,特別是標題為"控制反轉"的部分。

現在很多人都避免使用DI的"控制反轉"一詞,因為反轉與人們在依賴注入變得普遍之前所做的事情相比較。如果你現在已經習慣了依賴注入,或者是從一開始就有足夠幸運地這么想的人之一,那么試圖弄清楚被反轉的是什么只是令人困惑。

啊哈-事實上現在更有意義了。這是一個相對的術語,一旦你改變了使用依賴注入的心態,那么"反轉"就不再意味著什么了。在我開始使用Castle Windsor之前,我已經使用依賴注入很長一段時間了。當時,它只是為了使編寫單元測試更容易。

控制反轉基本上意味著應用程序代碼不關心它需要的部分來自何處。

您可以通過各種類型的依賴注入來實現IOC。

與Java世界中的情況相反,包裝器可能通過JNDI按名稱請求資源。在這種情況下,代碼要求它的需求,而不是提供它。

您說"應用程序仍然有責任要求它使用的對象(即服務),區別在于它不知道(或不關心)如何創建它。"

我不認為這是真的;組件不要求其他組件。依賴關系是從更高的層次注入的,這是一種不同的語義。這就是國際奧委會。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271740.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271740.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271740.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

redisTemplate進行自增操作例子

代碼 String key "redisAtomicLong:getAndIncrement:add"; RedisAtomicLong entityIdCounter new RedisAtomicLong(key, redisTemplate.getConnectionFactory()); Long increment entityIdCounter.getAndIncrement(); System.out.println(increment); 效果

像素包裝:在內存中并不以緊密形式排列

http://www.bubuko.com/infodetail-1312937.html轉載于:https://www.cnblogs.com/YTYMblog/p/5530925.html

成員變量和類變量的區別:

成員變量和類變量的區別: 1、兩個變量的生命周期不同 成員變量隨著對象的創建而存在,隨著對象的回收而釋放。 靜態變量隨著類的加載而存在,隨著類的消失而消失。 2、調用方式不同 成員變量只能被對象調用。 靜態變量可以被對象調用&#xff0…

無線網絡:家庭 WiFi 的安全隱患及實用的防范建議

現在幾乎所有家庭里都安裝無線路由器,但是很少人去關注安全問題,甚至附近有人在蹭自家網絡都毫不知情。 更為嚴重的是,獲取到你的無線路由器的權限,暴露你的無線路由的公網IP地址。通過遠程就可輕易地接入你的路由設備&#xff0c…

linux使用tar命令,Linux基礎教程:tar 命令使用介紹

Linux tar 命令是歸檔或分發文件時的強大武器。GNU tar 歸檔包可以包含多個文件和目錄,還能保留其文件權限,它還支持多種壓縮格式。Tar 表示 "Tape Archiver",這種格式是 POSIX 標準。Tar 文件格式tar 壓縮等級簡介:無壓…

網絡:WiFi6和WiFi5的區別介紹

隨著WiFi6時代的到來,那么就代表WiFi5時代的落幕,目前不少手機廠商或者電腦無線網卡廠商都將為自家設備添加支持WiFi6。那么大家是否了解對“WiFi6”有所了解呢?WiFi6與WiFi5之間又有什么區別呢?接下來就通過本文來好好了解一下Wi…

win10支持linux內核,Win10將允許您加載自定義Linux內核

微軟正在為Win10添加一個Linux內核,以支持Linux的Windows子系統。但是,猜測一下:你不必使用微軟的Linux內核。您可以構建自己的自定義Linux內核供Windows使用。此功能是Insider預覽版本18945中WSL新版本的一部分。這是一個20H1版本&#xff0…

java 中通過 Lettuce 來操作 Redis

spring-data-redis文檔: https://docs.spring.io/spring-data/redis/docs/2.0.1.RELEASE/reference/html/#new-in-2.0.0Redis 文檔: https://redis.io/documentationRedis 中文文檔: http://www.redis.cn/commands.html 本文學習一下如何通過…

電腦選購:看完才明白,一體機和臺式機電腦哪個好?

目錄 一、空間占用 二、硬件與性能 三、擴展性 四、可維護性 五、移動性 六、一體機和臺式機在需求上有什么區別 這里說的一體機和臺式機指的是電腦,一體機,顧名思義,就是屏幕和主機集成在一起,更加一體化。臺式機分為主機和機箱&…

linux子系統 重置,淺析win10系統重置Linux子系統的設置方法

今天小編給大家淺析win10系統重置Linux子系統的設置方法,重置Linux子系統后,我們就可從頭配置Linux子系統,例如新建用戶、設置密碼,并在里面安裝我們需要的應用程序等,有需要的用戶,請來看看如何重置吧。Wi…

硬件:那些安裝8G、16G以及32G內存電腦的區別介紹

??作者主頁:IT技術分享社區 ??作者簡介:大家好,我是IT技術分享社區的博主,從事C#、Java開發九年,對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽: 數據庫領域優質創作者🏆&#x…

Windows系統下安裝分布式事務組件Seata

1:github上下載seata安裝包 地址為https://github.com/seata/seata/releases/tag/v1.2.0 2:啟動seata 點擊seata-server.bat腳本文件 啟動后入下圖所示 3:測試seata是否啟動 通過jcmd,可以找到Seata進程

linux應用程序文件丟失,詳談Ubuntu軟件管理丟失的功能

多數人都認為Ubuntu通過Ubuntu Software Center徹底改革了dpkg包管理。毫無疑問,按照多數人標準來看,Software Center肯定是用戶友好的呢。但事實真是如此么?本文將介紹Ubuntu軟件管理的現狀,伴隨著Ubuntu首次發布的軟件管理走了多…

硬件基礎:電腦當中各個硬件的作用介紹

??作者主頁:IT技術分享社區 ??作者簡介:大家好,我是IT技術分享社區的博主,從事C#、Java開發九年,對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽: 數據庫領域優質創作者🏆&#x…

JAVA8 十大新特性詳解

作者:http://m.jb51.net/article/48304.htm?fromtimeline&isappinstalled0本教程將Java8的新特新逐一列出,并將使用簡單的代碼示例來指導你如何使用默認接口方法,lambda表達式,方法引用以及多重Annotation,之后你…

win8 linux分區工具,Ubuntu下掛載Win8磁盤分區

最近裝了個Ubuntu系統,但是一番折騰后發現除了分給Ubuntu的磁盤分區外其他的Win8下磁盤分區都無法訪問,在網上找了很多解決方案,但都無法最終解決。經過查閱資料,終于將問題迎刃而解。問題描述:Ubuntu系統下掛載Win8磁…

辦公技巧:常用的100個Word快捷鍵

Word是日常辦公和生活的最常用的文字處理軟件,大到工作中文章的撰寫,小到日常生活中點點滴滴的記錄,都離不開Word。在使用Word的時候,快捷鍵的使用,可以大大提升文字處理的速度。Word的快捷鍵中,下面這些是…

mysql什么是長事務

1.什么是長事務 首先我們先要知道什么是長事務,顧名思義就是運行時間比較長,長時間未提交的事務,也可以稱之為大事務。這類事務往往會造成大量的阻塞和鎖超時,容易造成主從延遲,要盡量避免使用長事務。

linux讀取目錄列表失敗,[linux]解決vsftpd 讀取目錄列表失敗的問題

使用第三方FTP軟件filezilla進行登陸,出現如下錯誤:狀態: 正在連接 192.168.1.6:21...狀態: 連接建立,等待歡迎消息...響應: 220 (vsFTPd 2.2.2)命令: USER ftp響應: 331 Please specify the password.命令: PASS ***響應:…

Win10優化:系統文件Hiberfil.sys介紹

目錄 一、Hiberfil.sys介紹 二、刪除Hiberfil.sys文件的步驟 1、如何找到Hiberfil.sys 2、通過管理員權限的cmd命令(注意要以管理員的身份運行) 一、Hiberfil.sys介紹 Hiberfil.sys文件位于系統盤的根目錄下,它是 win10 休眠功能(…