距上一帖近五天時間,讓大家久等了,沒想到關注這個話題的也不少人,正如有同志所說的想解決該問題其實是有太多的解決方法,比如動態構造類編譯、調用vbscript或者可以采用javascript解析引擎或者朋友“深藍醫生”所提到的IronScheme等等,
其實這些都不是我想關注的,工具雖重要,構架價更高;
下面還有朋友提到支持if else等語法的需求,其實我個人覺得在非常復雜的不可控的需求中這么靈活的擴展性是需要的,不過這個完全可以通過插件模式等進行擴展性功能開發,而在比較普遍的功能中,比如工作流當中,功能其實都是已經存在的,無非根據不同的條件進行不同的流轉;另外比如報表設計器中無非設置數據來源和對應的計算公式,即使復雜的算法也是由簡單公式組成的,所以接下來我想考慮的是解決普遍性而不是特殊性,好了廢話少說,我先上菜:
先講一下我為此設立的最終目標
另外還可以再看一下我們最終應用到的其中一個項目
這是一個配置界面,配置了一些邏輯條件,這些邏輯將會產生對應的表達式數組並如上目標所述需要序列為json並存儲,在最終執行的時候,在進行反序列並傳入對應的Entity實體獲得最終想要的結果,上面的配置界面配置的是一段條件,所以最后的結果自然是true或者false。
當把目標設定好,接下來就看一下架構怎么設計:
咱們還是看圖說話
該圖看起來非常簡單,總體來看就有兩部分組成,分別為
(1)核心(Core)
其中包括映射基礎處理部分和提供者基礎處理部分,需要支持.NET/MONO;
(2)提供者(Providers)
這個環節解決方案非常多,所以可以根據Core/PROVIDERBASE派生多個ExpressProvider,從而滿足開發人員不同的需要和實際環境等不同的要求。
好了,今天就先說這么多吧,接下來將直接放出源碼,大家一起討論其中的不足。