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

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

解析Caliburn.Micro(一)

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

  受朋友所邀,準(zhǔn)備使用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默認(rèn)是使用MEF來做IOC擴展的,你可以自定義Bootstrapper來使用你喜歡的IOC容器,如Unity等。設(shè)計時支持(Design-time support),CM中的ActionMessage是繼承自Blend中的TriggerAction的,也就是說可以在Blend編輯ActionMessage,大大方便了使用。

評價

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

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 准格尔旗| 滕州市| 德惠市| 刚察县| 嘉鱼县| 灵台县| 东乌珠穆沁旗| 法库县| 高雄县| 长宁区| 灵璧县| 万山特区| 岚皋县| 崇阳县| 潮州市| 蒲城县| 涞源县| 滦平县| 临夏县| 南宁市| 子洲县| 昌都县| 云梦县| 海晏县| 襄垣县| 红安县| 吉首市| 芷江| 舞钢市| 宜君县| 交城县| 胶州市| 峡江县| 吴堡县| 灵宝市| 咸阳市| 安塞县| 榆林市| 丰都县| 西吉县| 天气|