論面向事件設計(EOD)和物件導向設計(OOD)

來源:互聯網
上載者:User
把這兩個概念放在一起,確實不是很工整。但對於熱衷設計的我們,只要有用就行。

  首先來解釋這兩個概念。  OO是什嗎?呵呵,可能大家會笑我,OO誰不知道?不要和我說什麼封裝/繼承/多態!這些都是所謂的特性,我的問題是:OO到底在做什麼呢?  我給大家打個比方,假設你是一個項目的專案經理。現在你手頭上有一個任務,需要你去完成。你會怎麼去做呢?  一個選擇,是你自己完成所有任務。當然,如果你願意奪取你所有的手下的機會的話。你是可以完成。這就是我們以往經常說的面向過程(OP)。你知道所有你該做的,並且你去做了。  當然,你慢慢會發現,你的手下可以協助你解決一些問題。於是你試圖讓他們去執行你安排給他們的任務。不過,你並沒有脫離OP的階段,所有的工作都是你在安排,你在策劃,你在考慮。你只是使用了一些現成的庫來協助你工作。  隨著時間的推移,你的手下開始慢慢能頂替你的工作。你開始將任務直接交給幾個手下,告訴他們你想要的結果,讓他們放手去幹。過程中進行適當的監督和協調。恭喜你,你在採用物件導向了。你不再關心實現任務的具體細節。你關注的是手下工作要開心,調節他的工作狀態,適當給些鼓勵,適當給些壓力,適當給些激勵。這就是OO。  是的,OO是處理問題的方式。把你從無所不知的聖人,落地為毫無能力的蠢才。選擇OP還是OO,只是你的性格而已。   那麼,解釋完OO後,我們再來解釋一下“事件”這個概念。  什嗎?事件?不就是函數類型嗎?不就是以前Windows下的回掉函數嗎?不就是一個特殊類型的指標嗎?函數指標。  是的,我的問題同樣不是問事件是如何?的。我是問,事件是做什麼的?  在給你做一個比方吧。比方說我們要完成一個任務。內容是從北京到南京,距離1000公裡。我們選擇的工具是汽車,路線是高速公路。很好,你開始要選擇開什麼車了。現在市面上有現成的各種品牌的車(這些都是架構提供的現成類,如果用了,你就不需要自己再去實現汽車類了)。你願意選用嗎?可是現在有一個很現實的問題,家用車一般的油箱只有50升,要跑完1000公裡,油肯定不夠。看來一般的車是滿足不了我們的需求了。  一個辦法是我們自己造一個車,油箱足夠大,能夠放120升油。那麼顯然動力系統就能夠滿足。不過可想而知,要造一個車可是需要很多專業知識的。這條路你基本走不通,所以你只能又轉向原來的方案。  既然一次不夠,可不可以加油?當然可以!  好了,這個時候,我們要注意一下,我們在談論“事件”這個概念,現在才剛剛開始。  對於我們要完成任務的這些人來說,“事件”並不是我們關注。真正關心的人,是那些設計汽車和高速公路的人。  好吧,現在我們要做一個艱難的轉變。你由完成任務(從北京到南京)的人,轉變為公路系統的總設計師了。等你轉變完這個角色變換後,恭喜你,你的設計把控能力又提升了一大步。  假設你已經轉換完成。你現在是公路系統總設計師。你在設計道路的同時,當然要解決好我們加油的問題。可是你並不知道我們什麼時候需要加油。怎麼辦呢?  首先必然要在高速公路上設計必要的加油站,然後更重要的是在公路上提出標誌,讓汽車能夠接受到資訊,知道什麼地方有加油站。  回到軟體上來,如果你設計的高速公路類,還有汽車類,那麼汽車類應該在接受到高速公路上的加油站資訊的時候,就會觸發一個事件。至於怎麼處理,那就是任務完成者,也就是駕駛員要判斷的了。首先看看油還夠不夠了,如果不夠了,就進站加油。  饒了這麼大的一圈,我就是想說,事件是架構設計者,讓使用者方便擴充或定製自己行為的方式。   我之所以將EOD和OOD這兩種方式放在一起討論,其實也是因為目前的流行架構都是兩者的結合。如MFC、VCL、.NET Framework。  最近在討論Eclipse架構的時候,討論到它的外掛程式的“擴充點”概念。其實事件也是設計中使用的“擴充點”。或者可以說,EOD是OOD的擴充點。   Event並不是OO本身所特有的。是為瞭解決“執行流程”問題,在OO的基礎上加上的思想。有了這個思想,才讓我們這些使用者可以方便實現各種需求。  以往總聽到OP和OO的爭論,其中心都是理念的爭執!其實,真正解決問題的時候,我們經常什麼都用!可能那個時候我們才發現,什麼思想不思想,能解決問題的就是好的。這也讓我們更加相信設計沒有邊界! 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.