從消化系統講起,口腔、腸道、胃…等消化器官組成了消化系統,每個器官又是由更微觀的物質構成,比如細胞。細胞又可以細分。細胞可以分類,白細胞,紅細胞等等。這裡細胞可以認為是消化系統的基本組成元素。這種組成結構非常像面向對象的思維,因為它們都要解決同一個問題:現實世界復雜性。類可以認為是最基本的組成元素,類可以組成組件(構件) ,構件組成服務。知道了消化系統的組成,我們來看如何實現吃這個功能,吃的功能完成需要食物通過各種消化器官,使用消化器官的功能完成。這個過程是面向過程的,是一個流程。再看我們程序的實現,Staitc Main是程序的入口,C#中功能的實現也是通過調用相互關聯的類中的方法實現的。C#本身就提供了豐富的控制結構(if else,while等等) 。
分析:從最簡單的語句到類到組件,到子系統。代碼結構的最優化組織方式采用面向對象,可以更好復用,使用設計模式後可以更好控制變化。但是運行時邏輯往往是面向過程的。比如Main{}中的邏輯。就象細胞構成嘴、腸胃,這些器官又構成了消化系統,但是吃飯這個功能的完成是利用各個器官的功能,按照某種控制流程完成的。
結論:程序的目標之一是功能實現,其中實現方式是基於過程的,組織結構是面向對象的。
1.1過程控制模型
常見的過程控制模型有:1、C#語句控制流;2、XAML;3、數據庫表;4、DSL(領域描述語言) ,圖形(專用的圖形工具) 。數據庫表中可以存儲過程的調度邏輯,領域模式語言這幾年也非常流行。過程的描述可以用任何一種方法實現。
1.2C#控制流程的問題
看一看交互式過程:在流轉的過程中需要外部消息的響應的過程。可能某個處理會等待幾天甚至幾周。如果使用C#控制流實現,應該怎麼實現。一般的做法是新建一個線程異布執行某個流程,而主線程持續運行(類似Windows服務) ,如果流程停滯,線程會被阻塞,如果阻塞的線程一多,整個系統的性能就會有很大影響,畢竟線程池等系統資源有限。這種設計可以實現,但是可擴展性和可伸縮性都存在問題。Wf處理這類問題的思路是書簽機制,在線程停滯的地方加上書簽,並且書簽可以持久化保存到介質上,節約CLR中內存資源。管理器接收到消息後會繼續流程的運轉。書簽可以結合Observe模式和Delegate實現。第二講中我們可以進一步的了解到,wf的線程模型是天然的異步調用機制,可以非常好的解決這類情況。而工作流本身對過程模型的支持也強於目前的高級語言,下面的參考部分常見的工作流模式。
1.3工作流模式
工作流的概念起源於生產組織和辦公自動化領域,提出的目的是通過將工作分解成定義良好的任務、角色,按照一定的規則和過程來執行這些任務並對它們進行監控,達到提高工作效率、降低生產成本、提高企業生產經營管理水平和企業競爭力的目標。工作流從更高的層次上提供了實現物料流、資金流、信息流及其涉及的相關過程與應用的集成機制,從而使得企業能夠實現業務過程集成、業務過程自動化與業務過程的管理。通過定義不同任務之間相互關系的工作流模型, 無論是具體的操作動作,還是抽象的信息處理動作與決策過程,都可以用工作流的基本組成元素——活動來統一地進行描述。不同活動之間的關系,無論是具體的車間中零件加工順序關系、辦公自動化中的文件批轉、還是抽象的決策流之間的關系都可以用工作流的基本組成元素——連接弧來統一的進行描述。
基於Petri網原理研究了21種工作流模式。
基本模式(5個)
順序模式 – 按照順序執行各項活動
解釋:工作流流程中的一個活動只有當另一個活動完成後才能進行。
例子:當訂單登記活動完成後,客戶通知才可以進行。
並行分支模式 – 同時運行兩個活動
解釋:在流程中的一點一個控制線程分成可以並行執行的兩個控制線程,允許兩個活動可以同時運行。
例子:
同步模式 – 同步兩個並行的執行線程
單選模式 – 從多條路徑中選擇一個執行
簡單合並模式 – 合並兩個二選一路徑
高級分支與同步模式(5個)
多選模式 –從多條執行路徑中選出幾條
同步合並模式 – 合並多條路徑,如果有多條路徑被選擇,則進行同步;如果只有一條路徑被選擇,則進行簡單合並
多合並模式 – 合並多條路徑
鑒別器模式 – 合並多條路徑而不進行同步,只執行一次後續活動
M中的N模式 – 合並多條路徑,進行部分同步,只執行一次後續活動
結構模式(2個)
任意循環模式 – 沒有任何限制的執行工作流
隱含終斷模式 – 如果沒有事情可做,就結束
多實例模式(4個)
略
基於狀態的模式(3個)
推遲選擇模式 – 執行兩個可選線程中的一個,那個線程將被執行是隱含的
交替並行模式 – 兩個活動可以以任何順序執行,但不能並行進行
裡程碑模式 – 當一個裡程碑到達時,激發一個活動
取消模式(2個)
取消活動 – 取消當前活動
取消過程 – 取消該過程
參考:http://blog.csdn.Net/tobeand/archive/2004/11/26/195106.ASPx