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

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

解析Caliburn.Micro(一)

2019-11-11 01:01:06
字體:
供稿:網(wǎng)友

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

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

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

  顯然作者也聽取到了使用者的反饋,推出了Caliburn.Micro項目,Micro顧名思義,是Caliburn項目的精簡版。重構(gòu)了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等,每個框架都有自己側(cè)重點,像Prism側(cè)重于模塊間的組合,WAF側(cè)重于分層設(shè)計。通觀CM的設(shè)計,它的一些想法如下:

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

評價

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

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 葫芦岛市| 兰考县| 汶上县| 吐鲁番市| 巢湖市| 龙山县| 老河口市| 南城县| 新晃| 武平县| 丁青县| 洪泽县| 新田县| 遵义市| 富平县| 咸阳市| 彩票| 革吉县| 池州市| 万源市| 永靖县| 平邑县| 望都县| 永年县| 阳谷县| 五寨县| 偏关县| 稷山县| 房产| 黄梅县| 甘孜县| 老河口市| 昌邑市| 井陉县| 镇原县| 南京市| 绿春县| 行唐县| 塔城市| 宁波市| 灯塔市|