軟體設計原則總結
——成,2006-10-04
==============================理論篇:=============================
1.問題界定。
問題的界定,對於軟體開發來說是直觀重要的.因為任何一個軟體都不是單純的獨立服務的.
必定是為瞭解決某些問題而開發軟體進行更好的解決問題. 因此,問題的界定對於軟體的成功開發和
應用來說致關重要. 但同時,問題界定也是最難處理的一部分.我相信工作幾年,或者讀過<<你的燈亮著
嗎>>
這本書的人,對於問題定義肯定會有非常深刻的認知和理解. 問題界定的主要目的是讓我們能夠明白
軟體系統作什麼是足夠的,同時也可以讓我們考慮到系統以後的功能能夠在哪些方面繼續擴充.
問題界定,這個看起來似乎很容易做的事情,實際上卻不得不花費我們大量的時間和精力去
處理. 希望你能夠把這件事情做得乾脆,漂亮,利落. 那麼在以後的開發中,你的力氣不會白花.
2.準系統實現.
問題界定了就意味著我們已經規劃好,或者和甲方談好,我們的系統需要實現什麼,以及需要
完成什麼處理. 準系統,就是我們軟體系統的核心體現. 如果你的軟體沒有為他們解決問題,他們是
不原意為之付出代價的. 也就意味著你的軟體會虧本. 所以,系統準系統實現,對於任何一個軟體,
或者軟體開發人員來講, 都是基本素質的體現. 我們有義務,也有壓力把我們的系統的準系統做好.
當然,做好的標準很多,比如正確性, 可擴充, 高效能, 以及其他各種標準. 我希望我們都可以站在
更高的角度去審視我們的軟體,我們做到更好了嗎?
3.極端情況處理.
至於為什麼,要把"極端情況處理"放到這裡來講. 主要原因是很多軟體的評價者對於軟體的
要求都很高. 另外,就是軟體的適應性要好,因此,必須處理這些極端情況. 這裡2-8原則在這裡體現了
很多. 占系統80%的代碼都在處理占系統20%的意外,極端情況. 正如<<你的燈亮著嗎>>所說,如果你
沒有為你的解決方案找到至少三種可能的意外,你的方案就不可能不出問題.
4.客戶體驗之上.
軟體的主要服務物件是人. 這就是為什麼要說"客戶體驗之上".
5.系統在整個大的系統的位置,以及其對外介面很重要.
系統有了強大的功能,就意味著可能我們的軟體會為其他人提供更好的服務,也就可能會有
更多的客戶來購買我們的系統.整個系統就會被重新部署到其他位置,而新的位置,我們的系統十分能
夠依然提供強大的功能呢? 這就要我們考慮更多的系統對外介面. 就像很多話所說:一個人的英雄
不是英雄,大家一起創造的成功才真正值得慶賀。如果我們的系統功能強大,卻獨屬於一個孤島。
那我們的系統要想發揮其強大的作用,就會變得越來越難了。因此,我們為了讓我們的軟體系統可以
更好的服務客戶,也為了我們的軟體系統可以得到更好的回報,我們有必要對我們系統提供的介面
作更多的完善.
就像很多著名的軟體一樣, 關鍵的作用是他整合了很多其他人所不曾涉及的邊界領域,也
因此得到了很好的發展和推廣.
6.封裝功能,鬆散變化.(也就是高內聚,低耦合. 開放-封閉原則)
在物件導向的編程過程當中,我們經常會遇到"開放-封閉"原則.其實,這個原則並不只是應用
於物件導向的編程. 在我們日常的工作當中,很多事情都需要這些原則,用來保證我們可以更高效的
開發軟體,提高辦事效率. 把功能獨立封裝,增加他的扇出,減少扇入. 同時對於內部我們進行封閉,
而對外則提供良好的介面用來提供更多服務. 這也是搞內聚,低耦合在這裡的體現。
例如在J2EE應用中,把服務類進行充分的封裝,這種封裝,只要達到了組件的效果,就可以
得到很好的應用,而對於Action/Web層等變化比較多的地方,則自己採用獨立的方案,這樣以來,可以
提供一定的代碼複用. 但如果想做到更好.就要想更優秀的方法去解決了.
7.可裝卸,可配置;
任何軟體的完成,都是作為獨立的一個產品來完成的。但同時,軟體內部也是包含多個
模組的,各個模組之間或多或少的存在一些耦合。但這些功能的耦合,應該在更理想的一種階段。
就是可配置,可裝卸。任何一個模組的去除,不至於影響到其他功能。並且,更多的功能是採用配置
的,
就是說,各個模組,就像搭積木一樣。可以把其中的一塊替換掉,或者拿掉,但不可以影響
其他的功能。可配置,可裝卸的軟體,必將是未來軟體更為理想的開發模式。這對於系統的維護,
以及需求的變更適應性都是非常好的。
8.從使用者角度審視和評價軟體的可用性,易用性等特徵;
真正提升軟體產品的品質;
9.不要考慮太多外在的因素。
軟體首先是自身的因素。其次才是考慮和其他系統之間的關聯和介面;
軟體本身的品質保證很高,才能確保提供其他的系統的介面不出現問題;
10.軟體的功能需求,與非功能需求;
軟體的功能需求,是處理常式員(軟體設計師)等人員考慮的開發問題,這個階段,我們主要
集中處理率,軟體自身實現的考慮因素。
軟體的非功能需求,主要體現在為客戶著想的方面。從使用者的角度考慮,軟體的易用性,高效性,容
錯性等特點。
並且,軟體的非功能性需求 ,主要要體現在文檔中,我們為客戶想到了那些問題? 我們是否為客戶
解決了當前的所有問題?等 處理好非功能需求,對於軟體的使用和推廣都是直觀重要的。在我們完成
了功能需求以後,就應該將開發人員分為兩組,從功能和非功能需求兩方面考慮
和衡量軟體。從而進一步提高軟體品質,提高市場佔有率,提高軟體的價值。提高我們的價值。