一、前言
AgileEAS.NET SOA 中介軟體平臺是一款基於基於敏捷並行開發思想和Microsoft .Net構件(元件)開發技術而構建的一個快速開發應用平臺。用於幫助中小型軟體企業建立一條適合市場快速變化的開發團隊,以達到節省開發成本、縮短開發時間,快速適應市場變化的目的。
AgileEAS.NET SOA中介軟體平臺提供了敏捷快速開發軟體工程的最佳實踐,通過提供大量的基礎支撐功能如IOC、ORM、SOA、分散式體系及敏捷併發開發方法所支撐的外掛開發體系,以及提供了大量的實體、資料模型設計生成工具、程式碼生成工具,用於幫助中小軟體開發商快速成長。
AgileEAS.NET平臺充分把握目前軟體行業快速發展的新趨勢,基於敏捷並行開發、快速適應市場這樣淳樸的軟體工程實踐,採用業界廣泛使用的Microsoft .Net構件(元件)開發技術實踐了這種開發思想,幫助軟體企業實現“敏捷變化、快速適合”的目標,從而幫助軟體企業在激烈的市場競爭中贏得先機並獲得更高的回報。
二、管理資訊系統開發之中的字典選擇錄入問題
AgileEAS.NET SOA中介軟體平臺被廣泛的應用於MIS類系統之中,可以說基於AgileEAS.NET SOA中介軟體開發MIS類真是得天讀後,能大大的降低系統的開發難度和開發工作量。
有管理資訊系統開發之中有很大一部分工作是實現介面的資料選擇錄入,比如商品進銷存之中的根據輸入碼、拼音碼、檢索碼查出某部分字典資料並且選擇錄入,如下圖:
這是一個典型的字典選擇輸入應用,此類應用大量應用於比如像採購入庫、採購申請之中的選擇要採購的商品資訊,商品資訊儲存在商品字典,本案例是選擇藥品字典資訊,選擇錄入藥品字典資訊以便於進行藥品入庫業務處理。
在傳統的此類應用開發過程之中我們需要自己處理當輸入焦點在檢索文字框之中進行輸入的輸入事件以及大量的介面、資料檢索處理工具,費時費力,如果一個介面之中多出這樣幾個此類的應用場景,那麼這個外掛的程式碼的70%或者以上都用於應對此類場景,就形成了一種程式碼超長、介面控制元件、輸入控制元件的事件處理麻煩的境界,如以下這個介面:
這個介面之中有五處此類場景的應用,當然,在一些應用之中可能有十個或者更多的這種場景,整個模組在應對此類情況的程式碼極其之中,也會慢慢的導致程式碼的可讀性,可維護性越來越差。
三、TextBoxAutoComplete元件
AgileEAS.NET SOA中介軟體平臺在經過多年痛苦的開發應用之中,從各種客戶的反饋和開發應用的經驗之中積累了一套解決此問題的方案,並創造性的實現了一個基於輸入文字框的擴充套件解決方案,TextBoxAutoComplete元件及其之後的InputDict(輸入字典)管理體系。
TextBoxAutoComplete元件:根據其名稱我們可以簡單的理解為TextBox的自動完成元件,那麼其功能就是類似於baidu、google的搜尋文字框功能:
TextBox控制元件配合TextBoxAutoComplete完成類似上圖你的自動完成檢索功能,只不過baidu、google的搜尋文字框展示的是搜搜尋關鍵字,而AgileEAS.NET SOA中介軟體平臺之中的TextBoxAutoComplete展現的是各種字典的錄入選擇表格,如下圖:
TextBox控制元件配合TextBoxAutoComplete可以完成對任意型別的字典資訊的檢索錄入和自動完成功能。
四、輸入字典管理
如果說要實現對任意型別的字典資訊的檢索錄入和自動完成功能,僅TextBoxAutoComplete元件是不夠的,為什麼呢, 這會涉及到各類輸入字典的錄入資料規則、檢索規則、資料視窗(DataWindow)的資料顯示、排序規則、以及對資料來源的過濾規則等等。
那麼如何解決此問題呢,AgileEAS.NET SOA中介軟體平臺提供了一個字典管理功能“輸入字典”:
系統中維護著一組用於控制TextBoxAutoComplete元件的資料檢索、顯示的各項引數,其中包括如下重要資訊:
字典編碼:字典編碼是一個Guid型別的值,其值必須是唯一的,也早用於控制TextBoxAutoComplete進行重要的重要依據,也是維繫TextBox控制元件與TextBoxAutoComplete的唯一紐帶。
資料型別:TextBoxAutoComplete元件工作是所依賴的AgileEAS.NET SOA中介軟體ORM實體物件型別,即輸入字典的資料檢索、顯示必須依賴於ORM實體物件。
顯示引數:資料視窗(DataWindow)的寬度、高度和每次可顯示的記錄行數。
是否啟用快取:即輸入字典的檢索行為是基於資料快取進行的還是基於資料庫檢索進行的,因為我們的處理很多不常見化的字典資訊,比如民族、省份這樣的資訊不會經常發生變化,AgileEAS.NET SOA中介軟體平臺設計一套基於時間戳的實體快取體系,如果選擇啟去快取,只自動完成的檢索不會請求資料庫操作,以減少通訊和資料庫原因,如果選擇啟用了快取,則必須要設定快取屬性。
快取屬性:用於控制元件快取的增量更新的一個日期時間型欄位/實體資料,並且必須在ORM實體的這個屬性上面加上CacheUpdated標記:
1: /// <;summary>
2: /// 最後更新時間 。
3: /// <;/summary>
4: [Column("LMTime", "最後更新時間"),CacheUpdated]
5: [DisplayName("最後更新時間")]
6: public DateTime LMTime
7: {
8: get;
9: set;
10: }
並且需要在對就的字典管理/維護程式這中,當增加、修改某一行字典記錄之後需要把對應的欄位時間更新為最新的修改時間,那麼快取系統就會在一定的延遲規則之後獲得這一更新記錄。
顯示屬性:當TextBoxAutoComplete元件完成選擇錄入之後,顯示在關聯文字框內的值對應的ORM屬性。
快取間隔:輸入字典記錄本身的快取間隔,即TextBoxAutoComplete引擎從資料庫中更新對應的字典定義的週期,最小為0分鐘,即TextBoxAutoComplete直接讀取資料庫中的字典記錄。
碼值屬性:當TextBoxAutoComplete元件完成選擇錄入之後,用於執行其他業務的字典編碼屬性,一般情況下為字典的主鍵屬性。
顯示設定:用於設定DataWindow(資料視窗)之中顯示的列資訊記錄,包括顯示那些列、列標題、顯示順序等:
資料來源篩選:在資料根據輸入的條件檢索之前的資料篩選功能:
上圖的篩選條件表示僅選擇Icd10bksn值為“B”的記錄。
搜尋條件:用於定製TextBoxAutoComplete元件在經過篩選之後的資料來源上的檢索行為,例如本文第二張圖上的輸入的“ys”之後的資料來源檢索行為:
目前倒提供基於字串欄位的三種檢索條件:StartsWith(like ‘ys%’)、EndsWith(like ‘%ys’)和Contains(like ‘%ys%’),基本上能滿足99的應用。
五、開發過程
首先我們要有規劃,定將好資料實體、在必須的實體上定將好快取更新標記,最新版本的ORM設計器提供了支援,我們就以DrugShop案例之中的藥品字典實體以及在藥品入庫的錄入檢索為例進行說明。
藥品字典我們考慮使用快取,即把藥品字典快取在本地,以減少對伺服器的請求和通訊壓力,以下是藥品字典人的定義:
其中LMTime為最後更新時間,用於控制快取的增量更新。
當然需要注意的是,並不是所有的輸入字典資訊都需要從快取之中讀取,對於實時可變的錄入資訊,如高品庫存資訊必須要進行實時讀取,就沒有必要使用快取,因為對於這些實時資料,實體快取的準確率非常之低。
設計好ORM實體模型並且生成程式碼、編譯實體程式集之後,我們使用AgileEAS.NET平臺的輸入字典建立一個新的輸入字典:
打上啟用快取核取方塊、選擇設定快取屬性、碼值屬性、顯示屬性如下:
選擇顯示屬性如下:
設定搜尋條件如下:
複製下字典的編碼,並且儲存這個字典設定,接下來我們使用VS開啟程式,在藥品入庫功能之中使用剛才定義好的字典,首頁我們概引用平臺的EAS.Data.Controls.dll程式集,並且在工具欄之中新增選擇項=》選擇EAS.Data.Controls.dll程式集,確保把TextBoxAutoComplete元件載入到工具箱之中:
然後我們像介面拖入TextBoxAutoComplete元件,完成後如下:
然後我們設計檢索文字框txtSeach的屬性如下:
這地方最重要的就是設計TextBox基於TextBoxAutoComplete1元件擴充套件出來的屬性MetadateID,即擴充套件錄入後設資料ID,關聯自我們定義好的輸入字典。
是不是很簡單,定義一個輸入字典,程式程式碼之中只需要拖入一個元件,設計一個ID,即完成了需要大量編碼才能完成的工具,名至實歸的快速開發利器。
六、執行驗證
我們編譯並且啟動DrugShop.Main.exe,使用0001密碼sa登入,開啟藥品入庫功能,來試一下是否能夠執行自動完成:
OK,使用正常,沒有任何問題。
DrugShop案例之中同步提供了本例子的字典定義和使用程式碼,請大家通過AgileEAS.NET SOA中介軟體官方網站的最新下載欄目進行下載。
七、聯絡我們
為完善、改進和推廣AgileEAS.NET而成立了敏捷軟體工程實驗室,是一家研究、推廣和發展新技術,並致力於提供具有自主智慧財產權的業務基礎平臺軟體,以及基於業務基礎平臺開發的管理軟體的專業軟體提供商。主要業務是為客戶提供軟體企業研發管理解決方案、企業管理軟體開發,以及相關的技術支援,管理及技術諮詢與培訓業務。
AgileEAS.NET SOA中介軟體平臺自2004年秋呱呱落地一來,我就一直在逐步完善和改進,也被應用於保險、醫療、電子商務、房地產、鐵路、教育等多個應用,但一直都是以我個人在推廣,2010年因為我辭職休息,我就想到把AgileEAS.NET推向市場,讓更多的人使用。
我的技術團隊成員都是合作多年的老朋友,因為這個平臺是免費的,所以也沒有什麼收入,都是由程式設計師的那種理想與信念堅持,在此我感謝一起奮鬥的朋友。
團隊網站:http://www.agilelab.cn,
AgileEAS.NET網站:http://www.smarteas.net
官方部落格:http://eastjade.cnblogs.com
QQ:47920381,AgileEAS.NET
QQ群:113723486(AgileEAS SOA 平臺)/上限1000人
199463175(AgileEAS SOA 交流)/上限1000人
212867943(AgileEAS.NET研究)/上限500人
147168308(AgileEAS.NET應用)/上限500人
172060626(深度AgileEAS.NET平臺)/上限500人
116773358(AgileEAS.NET 平臺)/上限500人
125643764(AgileEAS.NET探討)/上限500人
193486983(AgileEAS.NET 平臺)/上限500人
郵件:james@agilelab.cn,mail.james@qq.com,
電話:18629261335。