移動App開發中的View解耦問題

2021-06-28 01:36:05 字數 1276 閱讀 3464

這幾天在做給ios**降耦的事情,順便嘮叨幾句開發中的view解耦問題。

首先,我們先定位一下view的角色:view應該只操心前/後景色,字型屬性,布局特性,x/y/width/height等純視覺屬性。不應該操心資料載入、修改,事件響應等model和controller關心的事。當然,也包括自定義的view。

接下來討論針對這個角色在實際開發中如何降低view部分耦合對整體架構的衝擊。

1、view的初始化、屬性設定應該有自己的owner,不應該放到controller中去。當然,這個工作可能由android中的xml布局或ios中的xib來替代。controller只負責拿到view的引用做後續的設定預設資料,安裝listener等操作就可以了。

2、資料提供和更新重新整理,都應該由controller觸發,如果資料比較複雜,像列表、宮格等,應該新增adapter層來做model和view的解耦。

3、事件的觸發應該通過listener來實現view與controller的解耦,不要把事件對應的邏輯直接寫到view中去,那會影響view的重用性,使**難於維護。

4、把螢幕適配的問題在view內部解決,不要在controller中去做。比如android中的xml中實現靈活布局,或者ios中使用autolayout。

最後說一下實際操作。

android中提供了xml布局其實變相做了強制解耦,使得我們使用過程中很少會在view中混雜其它**,我們只需要注意當view的model比較複雜時,增加adapter層來解耦就可以了。

而ios中由於歷史原因普遍採用的**生成view,會導致在controller中生成view,設定view屬性,以及在view中實現功能邏輯等mvc耦合的現象比較嚴重。鑑於storyboard對controller限制較多,這裡建議在在大型ios專案中,參照android的方式,通過xib提供view布局,並把view例項通過iboutlet對映到controller中,通過controller載入資料並安裝listener。不要在controller中出現操作view的視覺屬性的**。

補充於 2015.1.13

如果專案只支援ios6及以上時,可以使用autolayout+size class的方式替代**來完成所有布局。但要注意,使用vc直接載入xib時不用考慮螢幕適配問題,但使用loadnibnamed載入view時,需要把載入出來的view的frame變成目標frame。

size class的適配策略可以參考官方文件,雖然是8.0出來的,但可以向後相容ios6。

經過試驗,autolayout能完成**能實現的任意布局,如對齊、相對布局、installed自定義類,可以放心使用。

軟體開發中的解耦

專案進入關鍵期了,最近乙個禮拜不斷加班寫 回顧一年以來經歷過的專案,突然發現其實我們一直在追求的就是解耦,目的就是使自己的軟體系統能夠以更低的代價接受變化,比如增加新業務時,希望不用修改 或者少修改。級別的解耦是最常見的,把ooa ood做的更好一些,每個類的職責明確,介面功能盡量細分,多使用經典的...

Fonticon在企業移動APP開發中的應用研究

其實fonticon已經不是什麼新技術了,簡而言之就是 用字型檔案取代檔案,來展示圖示 特殊字型等元素的方法。它能夠讓開發者像使用字型一樣使用圖示 其實fonticon使用起來非常方便,在扁平化ui大行其道的當下,font icon將會為開發帶來巨大的效率提公升,同時兼顧了美觀,不同於的是 1,能夠...

解耦,獲取jar包中的資料

需求 獲取自定義jar包中某個方法的執行日誌資訊 需要打包的jar中 定義介面,日誌記錄 author version 1.0 description 日誌記錄 date 2021 2 28 16 12 public inte ce logrecord外部要呼叫的方法 author version ...