《WF本质论》第一章OpenSesame我的实现
?? ?相關的背景可以看http://www.cnblogs.com/cloudjun/archive/2009/04/04/1429299.html,有機會的建議看書。
?? ?剛開始看這本書,第一次接觸第一章的這寫概念,代碼省略的地方多了,看的感覺有點斷層。網(wǎng)上初略的找了一下源代碼,發(fā)現(xiàn)作者自己居然沒有提供,能找到的其他實現(xiàn)都沒有100%的實現(xiàn),即不是一個真正可運行的示例代碼。為了能夠更深入的理解,我自己按照書中給出的輪廓做了一個自己的實現(xiàn)。我的實現(xiàn)中,并不是100%依照書中的描述,有一些是根據(jù)自己的理解改進的,比如我的實現(xiàn)中BookmarkManager類并沒有Done方法,語句的狀態(tài),被定義到了ProgramStatement這個父類中,我認為Done這個動作是語句自身的狀態(tài)的一種,和書簽管理器本身沒什么關聯(lián)。書簽的刪除也從語句中移到了異步調用完畢(既ContinueAt方法調用之后),這樣更合理,在書簽管理器中刪除書簽。增加了一些書中提到的但是跳過的(常用理由:不是本章內容),比如BooleanExpression的實現(xiàn)(同樣使用了代理來實現(xiàn),順帶的及其簡單的實現(xiàn)了數(shù)據(jù)綁定),BookmarkNotFoundException,鈍化(使用System.Runtime.Serialization.Formatters.Binary來實現(xiàn),目前發(fā)現(xiàn).Net Framework也只有它能實現(xiàn)這個循環(huán)引用外帶委托的類的序列化,其他的其中DataContractSerializer不支持循環(huán)引用,SOAP格式不支持委托,XML序列化沒嘗試,我想到DataContractSerializer內部似乎使用了XML序列化)等。還有一些改動是按照書中所述很難實現(xiàn)的改動,記不清楚是哪些地方了,這個示例代碼陸陸續(xù)續(xù)的寫了2個星期。
?? ?沒有實現(xiàn)或完整實現(xiàn)的內容包括,最后的幾張數(shù)據(jù)庫表,因為實現(xiàn)解析器真不是本章內容了 :) ,我簡單的使用了C#本身來代替。書中提到書簽恢復之間的約束等(我感覺不是重點,而且加大了示例代碼的復雜度),數(shù)據(jù)綁定等。
Program中假定了2種情況,一種是一次運行完畢(all),另一種是運行到需要輸入的時候鈍化(part1, part2),等待輸入以后激活繼續(xù)運行。實際上是可以在任何一個書簽點鈍化的,只不過OpenSesame中的邏輯中只有等待輸入時候需要掛起,因此就按照這個邏輯設計了另外一種執(zhí)行方式。
?? ?另外,Program中的書簽是面向輸入和Key一致的情況,如果輸入和Key不一致會引發(fā)BookmarkNotFoundException,原因是PrintGreeting沒有被執(zhí)行,所以沒辦法恢復這個書簽。這種情況應該是正常的,書簽是由MythicalRuntime的客戶端自己保管的,如果需要可以判斷然后使用不同的書簽,我的實現(xiàn)中沒有提供對這種情況的支持。
?? ?示例代碼下載。
轉載于:https://www.cnblogs.com/wenhx/archive/2010/07/29/EssentialWF_1_OpenSesame.html
總結
以上是生活随笔為你收集整理的《WF本质论》第一章OpenSesame我的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何设置好看的form表单样式_HTML
- 下一篇: 页面表单样式