論設計思想的傳承

2021-04-12 16:25:05 字數 2182 閱讀 3172

好的軟體設計人員,往往能做出很靈巧,很優雅的設計,如果只有他乙個人開發的話,我想這個設計會演化成乙個很好的軟體產品。但是大多數軟體產品卻不是乙個 人來完成,特別是好的設計人員是稀缺資源,公司往往認為如果讓這個優秀的設計人員繼續去寫**是一種浪費,然後會把他拉去做另乙個設計,當然這個設計肯定 也會是優雅靈活的。

牛牛就是這樣乙個優秀的設計人員。牛牛也一直很自信和快樂的重複做著他的設計工作。一切看起來很完美,直到有一天這個牛牛發現,他半年前的設計並沒有順理 成章的演化為乙個很好的軟體產品,bug成堆,復用性差,擴充套件困難。問題出在哪兒?是設計還不夠好?牛牛決定探個究竟,把這個產品的**拿過來看看,到底 問題出在哪兒,可是令他吃驚的是他的設計已經變的千瘡百孔,任意扭曲。牛牛斷定這批開發人員能力太差,然後,他拿出另乙個產品的**,情形竟然類似!

牛牛迷惑不解,求教於大師:

「我把我的優秀的設計交給他們,並詳詳細細的教他們如何使用,他們為什麼還是扭曲了我的設計呢?」

大師曰:

「吾傳佛法,而非教規,可知為何?」。

牛牛皺眉想了一會兒心領神會。

我想不只我乙個人發現這個問題,設計在傳播過程中,或者在執行的過程中發生的扭曲。有些人可能會把這個問題歸結為執行的人能力太差理解不了的設計,可是作 為設計人員的你是否進到了責任呢?你傳授的時候是否把你的設計思想傳授了下去呢?還是只是告訴別人怎麼用你的設計?

怎樣才能把我們的設計思想傳承下去呢?怎樣才能讓執行人員理解精髓而不是迷惑於表面呢?我今天就介紹這幾個工具。

第乙個是隱喻,這是上上策,也是最難掌握的。極限程式設計的第一版中就把隱喻列為基本價值觀之一,但是在第二版卻刪掉了,原因就是太難掌握,但是他的威力也是非常巨大的。

什麼是隱喻呢?隱喻就是暗語,比喻的一種。或者我們乾脆理解為比喻。我理解隱喻的精髓在「喻」而不是「隱」。簡單說來就是把我們的軟體設計比喻成乙個大家熟悉的事物,通過大家對這個事物的了解了增加對我們軟體設計思想的了解。

mcconnell在**大全中把軟體開發比作建築。雖然可能並不準確,但是向瀑布模型等卻精確的理解了這個思想。

在軟體設計思想中,我能想起的乙個隱喻就是「鴨子」理論:「如果走起路來像鴨子,叫聲像鴨子,那麼它就是乙隻鴨子」。這是動態語言中比較推崇的理論,它的 主要思想是行為決定你的型別,而不是你的class。嚴格來說可能應該譯為「鴨子型別化」(英文是duck typing)。

第二個工具就是理論模型或者架構模式。理論模型是上策,架構模式只能算中策。但是他們有共同點:他們都有現成的成熟的理論;他們都需要學習才能掌握;他們 都有很高的抽象性。理論模型抽象性比架構模式更高,而且我們說的理論模型,更多的是指從其他領域借鑑過來的模型,這些模型在其他領域可能已經有了很多的輔 助理論和現成的定理。

什麼是理論模型?電腦科學是從數學發展來的,而數學是對真實世界的高度抽象,而對於不同領域不同問題的數學抽象,就是乙個模型。這個過程也叫做數學建模。對於一些典型的,複雜的領域,數學界一般都已經有了一些成熟的理論和模型,這是我們可以借鑑的。

架構模式我相信大家一定比我知道的還多,這裡就不班門弄斧了。

對於理論模型的作用,最強有力的支援是關聯式資料庫和關係代數。資料庫系統經過很多年的發展直到使用關係代數作為理論模型才最終成熟起來,誰也不能否認關係 代數對於關聯式資料庫的作用。現在的工作流系統之所以不夠成熟,很大乙個原因是沒有乙個成熟的理論模型作為依據。

理論模型的使用把設計思想很好的傳承下去。一些優秀的軟體專案也往往會找一些理論模型作為基礎,例如jbpm,就明確使用活**,有限狀態機,petrinet分別作為圖形建模,狀態變遷和流程執行的理論模型。

架構模式和理論模型的差別是,架構模式是軟體設計本身抽象出來的,而不是從其他領域借鑑的。架構模式使用非常廣泛,spring的ioc,rails的 orm部分activerecord的activerecord(前乙個是產品後面乙個是模式),還有大家非常熟悉的mvc,三層架構。

最後乙個工具就是概要設計,這雖然是最容易,最廣泛使用的,在我認為卻也是最差的,只能淪為下策。概要設計如果沒有遵循任何的理論模型和架構模式,這給開發人員的理解和記憶帶來了更大的困難,也由於沒有合適的參考,在軟體的開發過程中,也最容易發生變化。

我上面通篇都在講設計思想的傳承。傳承是如何做到的?「傳」需要我們告訴別人;「承」需要別人能繼續你的工作。我們往往只做到了「傳」,而且「傳」不得其 法,讓下面的人不知道如何「承」。上面提到的三個工具,除了「傳」之外,可以讓別人更好的「承」,無論是隱喻,理論模型還是概要設計都能起到知道軟體設計 開發作用,這就是別人要「承」的東西。

其實道理很簡單,但是很多人可能根本就沒有意識到這個問題的嚴重性。希望一此文給大家提個醒。

概率論中的建模思想

概念 樣本空間 隨機試驗e的所有基本結果組成的集合稱為樣本空間。隨機事件 隨機試驗e中的樣本空間的子集稱為e的隨機事件,簡稱為事件。基本事件 由乙個樣本點組成的單點集,稱為基本事件。以上概念是概率論中基本的概念。1 發現問題 隨機事件中有些是直接用數量來標識的,有的則不是用數量來標識的。要想更深入地...

論AOP面向切面程式設計思想

原文 前言 aop aspect oriented programming 面向切面程式設計思想已經有多年歷史了,但是在.net裡面一直沒有得到重視,不過這在mvc框架後被變革了,aop思想開始在.net流行起來,各種框架元件裡面,面向切面已經是標配了,各種筆試面試的過程中,更是不可或缺的!下面el...

PLM的設計思想

其主要的設計思想表現在以下幾個方面 1 保障產品資料的唯一性 完整性 準確性 及時性。企業在cad的應用上取得了成功,實現了設計工具的革新,使技術資料電子化,為企業管理的數位化打下了基礎。為了進一步提高工作效率,在總體上縮短產品開發周期,必須實現對電子化技術資料的有效管理,使其首先在研發中心門內部進...