台灣最大程式設計社群網站
線上人數
2710
 
會員總數:246575
討論主題:190032
歡迎您免費加入會員
討論區列表 >> 硬體 / 週邊 / 其他 >> 軟體設計師 的 "有所為" 與 "有所不為"
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
軟體設計師 的 "有所為" 與 "有所不為"
價值 : 10 QP  點閱數:5433 回應數:6
樓主

寸心千里
初學者
20 53
874 3
發送站內信

軟體設計師普遍存在著兩個很大的茫點:系統是單一、系統是自己開發的。

例如,進(訂購)、銷(銷貨、出貨)、存(庫存)系統,一般小型的套件(Package)產品都是此三者視為是單一、完整的進銷存系統。所以,當我們在世貿軟體展所看到各家軟體廠商所看的進銷存系統,業務人員所推銷給客戶、以及於其它同類型產品的比較就會偏重在系統的外觀面:系統所提供功能的多寡、完整性與使用者的圖形介面(GUI)。

又如,請假簽核系統,Designer 當一接到要開發這樣的系統時,大部分一開始會先從客戶 "要什麼" ,再據此開發出系統所該提供的功能與服務,然後,以功能需求為導向,"硬寫" 出來電子簽核的處理邏輯。卻很少去思考與分辨,到底,開發的是人事系統,還是簽核系統,又或者,就叫做請假簽核系統?

我常會在課堂上問學員,當你是主機板開發廠商時,你會不會 "打開" CPU 研究內部的結構呢?絕大部分的學員回答說不會。那麼,既然不會,從設計主機板的角度來看時,就會關注在 "如何" 與 CPU 所提供的 "接口(Interface)" 溝通;又,換一個角度,當你是設計 CPU 的開發廠商時,需不需要 "打開" CPU 呢?答案是理所當然,你必須專注在 CPU 的內部結構設計。同時,站在 CPU 設計者的角度,我只要提供 "接口" 供主機板來用,而根本不需要分析主機板的結構。事實上,CPU 設計者,並無法假設會使用 CPU 的就非得是主機板,可能是 PS2 or XBox,都有機會來使用 CPU。

這些是顯而易見的道理,從以上的例子,可以看出,兩個非常重要的設計哲理會被應用在軟體設計領域:一為介面(Interface);一為封裝(Encapsulation)。

"有所為" 即在於,知道什麼是該作的。瞭解你自己的角色,或者知道你現在是用什麼角度在看待系統的設計。當我是華碩主機板設計師時,我會研究 CPU 的規格,知道該如何與之溝通,但卻不會打開,事實上也無從知道,CPU 的內部結構。不需要打開,就會 "封裝" CPU,因為封裝,所以只能透過 "接口" 溝通 ; "有所不為" ,就表示,因為 "封裝" 了 CPU,所以,我沒有必須去分析 CPU 的內部結構,CPU 對我就是 "黑箱(Black Box)"。

回到 "請假電子簽核系統",應用上述主機板與CPU的例子,若是看成:
請假系統 = 主機板 ; 簽核系統 = CPU

那麼,若你是開發請假系統,你又何必 "打開" 簽核系統來分析與設計內部的結構呢? 反之,若我是開發 "簽核系統",我可不能假設只有 "請假系統" 會來使用簽核功能而與之 "綁在一起",也有可能,公文處理、採購等系統也會使用簽核功能吧?

明確瞭解你現在的角色與看待系統設計的角度時,就可以很理性地分辨出 "有所為" 與 "有所不為"。

有所為時,我會 "打開" 有所為之處,關注的是結構分析與設計;有所不為時,我會將之視為是 "黑盒子",只關注在如何透過該黑盒子所提供的 "接口" 與之溝通。

大格局的軟體設計架構師(Architect),會花很多的時間來觀察與分辨 "有所為" 與 "有所不為"。 "有所不為" 越多,越能顯示其本領。而不會是 "什麼都是自己來,一切都是自己做的"。

P.S.
"主機板" 與 "CPU" 是相對關係,主機板會整合許多的元件(Component,或稱之為組件),包括 CPU;那麼,當站在 CPU 設計者角度時,其實,CPU 也可以視為是 "主機板",因為,CPU 同樣也必須整合許多組件,包括,暫存器、控制與邏輯運算單元等。

--------------------------------------------------------------------------------
=$∼寸心千里∼$=
= msn: kenming.wang@msa.hinet.net
= blog: http://www.kenming.idv.tw/
= 軟體設計討論: http://www.hsdc.com.tw/

搜尋相關Tags的文章: [ uml ] , [ ooad ] , [ 軟體設計 ] , [ 研討會 ] , [ 物件導向 ] , [ mda ] ,
本篇文章發表於2005-08-16 22:13
== 簽名檔 ==
= 寸心千里=
= blog: http://www.kenming.idv.tw/
= 軟體課程訊息 http://www.hsdc.com.tw/
1樓
回應

藍色心情
捐贈 VP 給 芎安 檢舉此回應
獲益良多!^^"
本篇文章回覆於2005-08-17 08:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

Allen
捐贈 VP 給 Allen 檢舉此回應
以我而言,就是同時寫二個系統,原因是因為一個請假系統客戶沒打算出多少錢做,而如果我要花錢去買別人的簽核系統元件,客戶應該會受不了這個價格,解決之法就是寫一個只適用於客戶的簽核系統就好了

所以我最後的做法,是寫一個小的簽核模組,有些參數可以設定,日後有不同案子需要時,都用它,但特殊狀況的處理能力並不佳,仍會需要by project來做小修改,就如同請假系統一定架在一個所謂"員工管理系統"之上,但其實並不太需要先寫好一個"員工管理系統",反正每次專案都不同,所以接到專案時,仍會需要重寫員工管理,而它對我而言,也不算是一個黑箱

您的封裝的論點我同意,但用它推論成
請假系統 似乎不應該再花心力寫 簽核系統
我就不太了解了,不知道有沒有誤會您的意思
本篇文章回覆於2005-08-17 09:28
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

寸心千里
檢舉此回應
>您的封裝的論點我同意,但用它推論成
請假系統 似乎不應該再花心力寫 簽核系統
我就不太了解了,不知道有沒有誤會您的意思>
-----------------------------------------

並不是不應該再花心力寫簽核系統。
而是,在心態上,你要知道這兩個系統是彼此獨立的,即使是同一個人或同一個團隊開發,仍須看待成兩個獨立的個體。
本篇文章回覆於2005-08-17 10:17
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

Allen
捐贈 VP 給 Allen 檢舉此回應
這倒是,先前在寫asp時,在早幾年,只要是電子流程,都混在程式中,實在不好改
後來抽空寫好一個小模組,流程改成從db中設定,而專案不同也可以呼叫它,現在寫asp.net,也將這個模組改寫成asp.net版本,也是ok的

其實改用asp.net撰寫時,由於每個物件都是一個個分開的class, 有意無意地也就會先將各個功能各自開發了
本篇文章回覆於2005-08-17 11:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

Allen
捐贈 VP 給 Allen 檢舉此回應
我再補充一下
當我寫web page表單,submit後,總是要做insert or update, 每頁表單欄位都不同,數量也不同
所以,我就寫了一個小物件"自動地建立sql statement"

對各表單而言,不必管它是如何做到的,只要單純地呼叫它即可,我在asp, asp.net都有這麼做,對於基本的insert ,update就很方便了
本篇文章回覆於2005-08-17 11:18
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

Swhsu
檢舉此回應
您好:
想請問您說把簽核部分獨立出來當成一個套件
是否可以稍微教導小弟一下呢?
謝謝您的幫忙!

本篇文章回覆於2008-10-27 16:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.