1編程模型
從消化系統講起,口腔、腸道、胃…等消化器官組成了消化系統,每個器官又是由更微觀的物質構成,比如細胞。細胞又可以細分。細胞可以分類,白細胞,紅細胞等等。這裡細胞可以認為是消化系統的基本組成元素。這種組成結構非常像物件導向的思維,因為它們都要解決同一個問題:現實世界複雜性。類可以認為是最基本的組成元素,類可以組成組件(構件) ,構件組成服務。知道了消化系統的組成,我們來看如何?吃這個功能,吃的功能完成需要食物通過各種消化器官,使用消化器官的功能完成。這個過程是面向過程的,是一個流程。再看我們程式的實現,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