国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

解析Caliburn.Micro(一)

2019-11-11 02:53:32
字體:
來源:轉載
供稿:網友

  受朋友所邀,準備使用Caliburn框架設計項目,這兩天研究了一下這個開源框架,分享一下。

  Caliburn是Rob Eisenberg在2009年提出的一個開源框架,可以應用于WPF,Silverlight,WP7等,框架基于MVVM模式,像它的名字一樣,是企業級應用的一把利器。

  之前就聽說過這個項目,下載過源碼簡單看了看,代碼注釋很用心,文檔說明也很詳盡。不過似乎有些想法太大,10多個工程,數萬行代碼,欽佩之余沒有看得下去。

  顯然作者也聽取到了使用者的反饋,推出了Caliburn.Micro項目,Micro顧名思義,是Caliburn項目的精簡版。重構了Caliburn的代碼,精簡掉了一些不常用的功能,按作者的話來說:

My vision was to take 90% of Caliburn’s features and squash them into 10% of the code.

  非常給力的一句話,下面深入Caliburn.Micro,看看它的究竟。

亮點

  在細談Caliburn.Micro(簡稱為CM)之前,先來看看它的亮點。

  基于WPF的框架有很多,PRism,WAF等,每個框架都有自己側重點,像Prism側重于模塊間的組合,WAF側重于分層設計。通觀CM的設計,它的一些想法如下:

ActionMessage,結合了Blend中的TriggerAction,可以把UI控件中的事件綁定到后臺方法,類似于CallMethodAction。CM對ActionMessage進行了很多擴展,包括可以傳入多個參數,參數支持綁定,可以通過CanExecute作執行前判斷并設置控件的Enable等。Conventions,協定,這個詞聽上去有點虛,其實就是智能匹配的意思。CM制定了一系列匹配的規則,比如說View和ViewModel之間的匹配,綁定時傳入控件名可以找到控件,傳入方法名可以綁定到方法等等。Screen和Conductor,作為一個Presentation的框架,各個UI部件(Widget或者叫Pad)的管理是必不可少的。Screen就是用來表示UI部件的,它定義了一些列UI部件的生命期事件,比如Activated,DeActivated等。Conductor是用來管理Screen的,類似于傳統的Controller,不同的Screen可以用一個Conductor來管理,Conductor也使用了策略模式允許更改對Screen的處理。Coroutines,協同程序,定義了一組程序的執行,簡化了異步編程。比如說在網絡中下載圖片并顯示,通常來說需要顯示BusyIndicator,后臺線程去網絡讀取圖片,讀取成功后Invoke到UI線程,取消BusyIndicator,顯示圖片。CM提供了一個IResult接口,大大的簡化了異步編程,結合ActionMessage,為AOP的擴展提供了可能。配置性和擴展性,CM移除掉了原Caliburn的一些IOC實現,作為一個通用框架,最常用辦法就是使用工廠模式結合配置文件提供可配置性,使用IOC來解耦組件間的依賴。CM默認是使用MEF來做IOC擴展的,你可以自定義Bootstrapper來使用你喜歡的IOC容器,如Unity等。設計時支持(Design-time support),CM中的ActionMessage是繼承自Blend中的TriggerAction的,也就是說可以在Blend編輯ActionMessage,大大方便了使用。

評價

  CM符合我對于框架設計的期望,精簡,特點鮮明,思路清晰,不過度設計,有很好的擴展性和可測試性。指望一個框架做所有事情是不現實的,用牛刀來殺雞可能殺的爽快,不過學習的時間成本和后期維護成本都很高,目前對CM很有好感,打算下個項目基于CM搞一搞,如果朋友們有更好的經驗和建議也希望多多交流。

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 威远县| 普格县| 天峨县| 富民县| 乌鲁木齐县| 朝阳县| 湾仔区| 会理县| 普洱| 桑植县| 宁强县| 大庆市| 紫阳县| 达孜县| 阳江市| 温宿县| 明溪县| 广饶县| 兰溪市| 女性| 前郭尔| 北流市| 焦作市| 平阴县| 蒲城县| 侯马市| 公安县| 东丰县| 汝州市| 贵南县| 河间市| 遂昌县| 黄浦区| 安溪县| 东乌珠穆沁旗| 长治县| 古蔺县| 岢岚县| 平和县| 贵溪市| 孟津县|