通用和專用是編程的永恆主題,編程的演化很大程度上是專用變通用的過程,歸納是更一般的叫法。專用與通用比較,往往具有更多的上下文約束,而程序設計則希望通過更細或更有效的分組、分類,而使這些上下文約束更通用,更具適應性。
對於企業應用來說,這樣的約束一般來源於業務邏輯,而需求和程序設計也是圍繞着業務邏輯的選擇和處理展開。很多概念的形成有它自然的過程,如果經常把這些概念舉在手上,反而如一座座山峰,遮住了事情本來的面目,這樣也不利於這些概念的運用,當然拿來嚇人或顯擺的除外。
SQLDB關注於業務邏輯實體的結構及基本約束的一致性。NOSQL則揭示出業務邏輯實體的結構與業務邏輯對象的上下文相關性,也就是數據的結構與具體數據的相關性,完全通用的結構已經難於滿足現在需求。BPEL則說明我們不單關注於數據的結構和模式,數據的來源、數據的有效性、業務邏輯對象的演變過程(即生命周期),也納入了編程的范圍,更多地以動態的視角去觀察、設計系統。業務邏輯的知識表示,則表示新的、平常化的信息化需求,對編程的效率、簡單化、智能化提出更高的要求。
這是以前寫的一篇隨筆,因為有許多不同的想法,想加一個評注,只是寫着寫着就有些多了,於是整理一下就放在一起了。灰色字體的部分是原來寫的,放在一起並不表示同意原來的觀點,只是留作記錄和對比。
流程是一個很熱的詞匯,試着總結一下,理得不算很清楚,但也不至於太糊塗。
流程的特點:
0、流程體現的是前因后果,不會出現種瓜得豆的情況。
1、流程是虛擬的,又是具體的,體現的是某一類事的運作規范,但又通過具體的事來體現。
2 、流程是調適的,會因外界的因素影響。
3、對於商業流程來說,流程體現的是商業模式的運作方式。
4、商業流程的起因一般是客戶需求。
5、整體流程由多個主流程,以及許多與主流程相關的分支流程組成,流程間相互銜接。
6、知識和規范是控制流程的主要因素。
7、流程與組織結構相關,組織結構的執行機構一般根據流程來設置和分工。在設計流程時,組織結構通過虛擬的腳色來體現。
8、流程是資源運作的體現,流程也體現了資源變動的結果。
9、流程的權限是資源權限的體現,反映人力之間的職責分工。消息、通知、執行、控制可以認定為信息資源,權限可以通過資源的分配來實現。
10、流程強調的是執行過程的有效,而管理考核的往往是結果和形式。
11、流程反映的是過程性,而模塊反映的是功能性,也可以這樣說,流程反映的是線,模塊反映的是點,各有所側重。
12、有些流程側重於管理需要,有些流程側重於業務需要。
13、流程是有生命周期的,流程往往會跟項目管理結合。
14、流程可以通過消息和通知來交換數據。
數據的上下文:
業務實體的狀態演變是軟件系統運動的基本方式。 而演變的基本依據是業務邏輯,同時業務邏輯的實現應該基於業務實體的結構和內容,而盡量避免基於業務實體的存儲結構。
從更細的層次看,業務實體對象的生命周期產生了業務實體的狀態演變,業務實體對象生命周期的處理,是程序設計的核心。
模塊設計主要關注實體對象生命周期的演變結果,而流程程序則關注生命周期演變過程。可以這樣說,模塊是流程處理的簡化,主要關注數據的結果,而不是數據的上下文。流程與模塊是處理同一事情的不同處理方式,過分強調流程的獨立性,反而會限制流程的運用,這也許經常會把流程與審批掛鈎的原因吧?流程應該是程序設計的基點,而模塊設計只是流程設計的一種方式。


以往的設計,我們往往更關注實體的結構,畢竟程序是由數學演變而來的,結構是數學家的主菜,結構的能力是他們所關心的。而流程設計表示我們開始關注數據的上下文,關注業務對象的生命周期,關注業務數據產生的內在邏輯和相互約束,以及對目標的控制和反饋。
在上下文相關的設計中,臨界集的求取(主要用於風險控制)、流程設計,應該是再基本也是易於程序設計。而業務邏輯的代碼化實現,往往讓程序缺少彈性和適應性,而好的設計要求有實用、有效的知識表達框架以及知識運用模式,以及多種語言的協同運用,現在實現起來還是比較有難度。從編程角度看,知識是詞匯的演算,而我們還缺少這樣的演算能力。
題外話:
讀者對文章有自己的判讀力,而書寫者只要當時認為自己所寫的東西,對別人有所益處或者值得與別人去討論就可以了,隨筆本身沒有必要設置太多的前提條件。而要放置到首頁,書寫者本人是否應該有一道檻。