白話控制反轉IoC及其應用

  控制反轉(IoC, Inversion of Control),依賴注入(DI, Dependency Injection)是在面向對象編程中常常碰到的專業術語。不少朋友可能在百度以後,便淺嘗輒止,沒有深刻理解這兩種思想的精髓。咱們在查找IoC的含義的過程當中,可能 見過這句通俗的解釋:你呆着別動,到時我會找你。這句解釋到底應該如何去理解呢?下面,咱們結合具體的業務場景和其實現方式的研究,來對IoC以及DI作一個比較詳細的解釋,但願可以對初學者有所啓發。編程

一. 一個常見的業務場景微信

  在移動互聯網APP中,幾乎都要使用推送信息的功能,如:咱們常常會在週五晚上收到APP的推送消息,這樣的消息形式包括APP自有推送(通知欄),短信推送(短信中的通知類消息,有可能被過濾),郵件推送,微信推送,甚至之後還可能拓展到穿戴式設備推送,消息的形式很是豐富。而推送的消息中,主要是一些商品推薦類,內容推薦類或者系統通知類的內容。假定如今公司要你負責這部分推送功能的架構和實現,你應該如何去設計呢?網絡

  這個業務場景能夠說在每一個移動互聯網公司都會遇到。假如該公司的名稱爲XM,負責實現該部分功能的小組中有三位研發成員,分別是:小A,小B和小C。如何對該功能系統進行總體架構,使得開發效率最高?咱們能夠圍繞如下幾個問題,進行逐步探討:架構

  • 若是隻實現短信推送的功能,如何設計和實現?
  • 怎麼使系統保持可擴展性,減小研發人員的修改工做?
  • 能夠完全省去對代碼的修改嗎?

  咱們圍繞這三個具體的問題,來一步步實現和改進咱們的系統。spa

二. 功能的設計實現與改進架構設計

2.1 程序實現V1.0設計

  首先,短信推送的功能,要今天晚上開發上線。三我的一聽就慌了,還有五個小時,顧不上考慮那麼多了,先把功能開發出來再說。因而,三我的通過簡單的討論,將系統的實現架構設計以下:code

  

 

   根據系統設計,分工以下:由小A負責業邏輯控制模塊LogicController的開發,此處簡化爲XM.LogicController.exe;由小B負責推送消息管理(PushMsgService),並集成到組件 XM.MsgService.dll中;由小C負責短信功能幫助類(SMSHelper),並提供組件XM.SMS.dll。對象

  根據以上的設計和分工,不到一個小時,功能便作出來了。各自的代碼以下:blog

  小C的短信功能幫助類核心代碼:

1 public class SMSHelper
2 {
3     public void Send(string message)
4     {
5         Console.Write("From SMS: " + message);            
6     }
7 }

  小B的消息管理模塊核心代碼以下:

 1 public class PushMsgService
 2 {
 3     SMSHelper pushTool;
 4  
 5     public PushMsgService()
 6     {
 7         pushTool = new SMSHelper();
 8     }
 9  
10     public void Push(string message)
11     {
12         pushTool.Send(message);
13     }
14 }

  小A的業務集成模塊的核心代碼以下:

1 string message = "今日特價:創意城綠茶餐廳30元4人餐";
2 MsgService.PushMsgService service = new MsgService.PushMsgService();
3 service.Push(message);

  三我的通過短暫的拼搏,終於完成了任務,順利上線了產品。作完以後,三我的洋洋得意的push了代碼,一塊去街邊擼串去了。當日,系統運行良好,無任何bug出現。次日,相應的功能被移植到了公司的其餘部門。如:後臺編輯部開發的推送管理系統,也須要此功能;運營部開發的產品推薦系統,也須要此功能;人力資源部門的招聘管理系統,也須要此功能。短信消息推送的功能,在各個部門裏面,被普遍的應用,都是採用ABC開發的這一套庫去作的實現。

2.2 程序實現V2.0

  有天,跟XM合做的短信服務商忽然提升了合做的價格,每條短信要多收1分錢。因而,部門經理當機立斷:當即研發自有推送功能。除非客戶所處的地區網絡及其很差,不然,一概採用自有推送功能進行消息推送。

  接到這個需求以後,ABC便快馬加鞭的開始工做了。不過,此次他們有點頭疼了,由於他們以前的代碼不只在本身部門使用,並且在編輯部,運營部,人力資源部都有被使用。若是要修改,難道我要一個個去各個部門修改嗎?怎麼樣使得此處的變化,產生最小的影響呢?這就是咱們要研究的第二個問題。

相關文章
相關標籤/搜索