App架构设计经验谈:展示层的设计
2019獨角獸企業重金招聘Python工程師標準>>>
App架構設計經驗談:展示層的設計
三層架構中,數據層和業務層都已經做過了簡單的分享,最后,就剩下展示層了。本篇就給各位分享下我在展示層設計方面的一些經驗心得。
展示層是三層架構中最復雜的一層了,需要考慮的包括但不限于界面布局、屏幕適配、文字大小、顏色、圖片資源、提示信息、動畫等等。展示層也是變化最頻繁的一個層面,每天改得最多的就是界面了。因此,展示層也是最容易變得混亂不堪的一個層面。一個良好的展示層,應該有較好的可讀性、健壯性、維護性、擴展性。
三原則
我在Android項目重構之路:界面篇中提到過三個原則,要設計好展示層,至少需要遵循好這三條基本的原則:
保持規范性:定義好開發規范,包括書寫規范、命名規范、注釋規范等,并按照規范嚴格執行;
保持單一性:布局就只做布局,內容就只做內容,各自分離好,每個方法、每個類,也只做一件事情;
保持簡潔性:保持代碼和結構的簡潔,每個方法,每個類,每個包,每個文件,都不要塞太多代碼或資源,感覺多了就應該拆分。
關于這三個原則詳細的解說,界面篇已經講過的,我這里就不再重復。在此,我只做些補充。
關于規范,Android方面,我已經分享過一套Android技術積累:開發規范,主要分為書寫規范、命名規范、注釋規范三部分。iOS方面,蘋果已經有一套Coding Guidelines,主要屬于命名方面的規范。當我們制定自己的開發規范時,首先就要遵守蘋果的這份規范,在此基礎上再加上自己的規范。
最重要的不是開發規范的制定,而是開發規范的執行。如果沒有按照開發規范去執行,那開發規范就等于形同虛設,那代碼混亂的問題依然得不到解決。
另外,Android系統本身已經對資源進行了很好的分離,字符串、顏色值、尺寸大小、圖片、動畫等等都用不同的xml文件定義。而iOS系統在這方面就遜色很多,只能自己實現,其中一種實現方案就是通過plist文件的方式實現和Android一樣的機制。
工程結構
工程結構其實就是模塊的劃分,無非分為兩類:按業務劃分或按組件劃分。
比如一個電商App,可能會有首頁、附近、分類、我的四大模塊,工程結構也根據這四大模塊進行劃分,Android可能就分為了四個模塊包:
com.domain.home 首頁
com.domain.nearby 附近
com.domain.category 分類
com.domain.user 我的
同樣的,iOS則分為四個分組:home、nearby、category、user。
之后,每個模塊下相應的頁面就放入相應的模塊。那么,問題來了,商品詳情頁應該屬于哪個模塊呢?首頁會跳轉到商品詳情頁,附近也會跳轉到商品詳情頁,分類也會跳轉到商品詳情頁,用戶查看訂單時也能跳轉到商品詳情頁。有些頁面,并不能很明顯的區分出屬于哪個模塊的。我接手過的,按業務劃分的二手項目中(即不是由我搭建的項目),我要找一個頁面時,我認為應該屬于A模塊的,但在A模塊卻找不到,問了同事才知道在B模塊。類似的情況出現過很多次,而且不止出現在我身上,對業務不熟悉的開發人員都會出現這個問題。而且,對業務不熟悉的開發人員開發新的頁面或功能時,如果對業務理解不深,劃分出錯,那也將成為問題,其他人員要找該頁面時更難找到了。
因此,我更喜歡按組件劃分的工程結構,因為組件每個人都懂,不管對業務熟不熟悉,查找起來都明顯方便很多。Android按組件劃分大致如下:
com.domain.activities 存放所有的Activity
com.domain.fragments 存放所有的Fragment
com.domain.adapters 存放所有的Adapter
com.domain.services 存放所有的Service
com.domain.views 存放所有的自定義View
com.domain.utils 存放所有的工具類
iOS的分組則大致如下:
controllers 存放所有ViewController
cells 存放所有Cell,包括TableViewCell和CollectionViewCell
views 存放所有自定義控件或對系統控件的擴展
utils 存放所有的工具類
基類的定義
Android的Activity、Fragment、Adapter,iOS的ViewController,分別定義一個基類,將大部分通用的變量和方法定義和封裝好,將減少很多工作量,而且有了統一的設置,也會減少代碼的混亂。比如我在Android項目重構之路:實現篇中提到的KBaseActivity和KBaseAdapter的實現就是例子,當然還可以抽離出更多變量和方法。
每個Activity的onCreate()方法,一般分為三步:
變量的初始化;
View的初始化;
加載數據。
因此,其實可以將onCreate()方法拆分成三個方法:
initVariables()
initViews()
loadData()
在基類中將這三個方法定義為抽象方法,由子類去實現,這樣,子類就不需要實現onCreate()方法了,只要實現更細化的上述三個方法即可。
iOS的ViewController也是同樣的方式,這里就不重復了。
轉載于:https://my.oschina.net/u/2394328/blog/634394
總結
以上是生活随笔為你收集整理的App架构设计经验谈:展示层的设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百款APP嵌入 KeyMob移动广告聚合
- 下一篇: 一天一种设计模式之五-----代理模式