成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

第十年的選擇,咕咚到底選擇了什么?

原創
移動開發
2007年第一代iPhone的發布開啟了智能手機的新時代,至今移動開發已跨越了十年的路程,十年中有著太多的改變。隨著移動互聯網的突飛猛進,人們的生活方式也在日益變化著,身處在單調生活中的人們也開始注重健康的生活方式,咕咚(Codoon)則是看中了這一市場,致力于通過游戲化、社交化和碎片化的方式,來鼓勵人們形成良好的運動習慣和生活方式,從而獲得身體的健康。

【51CTO.com原創稿件】2007年第一代iPhone的發布開啟了智能手機的新時代,至今移動開發已跨越了十年的路程,十年中有著太多的改變。隨著移動互聯網的突飛猛進,人們的生活方式也在日益變化著,身處在單調生活中的人們也開始注重健康的生活方式,咕咚(Codoon)則是看中了這一市場,致力于通過游戲化、社交化和碎片化的方式,來鼓勵人們形成良好的運動習慣和生活方式,從而獲得身體的健康。

此次由51CTO主辦的2017WOTA全球架構與運維技術峰會上,咕咚技術總監唐平麟老師分享了主題為《第十年的選擇》的演講。

 

[[189728]]

咕咚作為中國最大的運動社交服務平臺,其APP需要與手機硬件綁定的非常多,基本使用到手機里所有芯片和感應器,所以相對于其他APP在架構的選擇上會更加保守一些。為了照顧與手機硬件的綁定,咕咚幾乎沒有用到React Native等動態化的技術,為了保證系統的穩定性,咕咚更偏向于選擇原生實現。架構上偏保守的實現會相對比較復雜,而咕咚就面臨著這樣的難題。

咕咚最開始選擇的是MVC的框架。經典的MVC與蘋果的MVC不太一樣,蘋果的MVC里的Model(數據管理者)、View(數據展示者)、Controller(數據加工者)是互相聯系的,導致所有對Model的操作必須經過Controller,如此一來, Controller會越來越大。在經典的MVC里面,View跟Controller是可以同性的,而蘋果的則不可以,Cocoa MVC = MVC + Data Service缺少了View跟Model之間的聯系,這就是為什么蘋果的架構里面Controller會越來越大,最后會導致非常大的問題。

胖Model包含了部分弱業務邏輯。胖Model要達到的目的是,Controller從胖Model這里拿到數據之后,不用額外做操作或者只要做非常少的操作,就能夠將數據直接應用在View上。瘦Model只負責業務數據的表達,所有業務無論強弱一律到Controller上。瘦Model要達到的目的是,盡一切可能去編寫細粒度Model,配套各種helper類或方法來對弱業務做抽象,強業務依舊交給Controller。一旦選擇了胖Model,Controller拿到數據之后,不用做太多的選擇,就可以把數據顯示在Controller里面。有時候為了選擇,咕咚也會使用瘦Model,但是不敢將任何業務邏輯都不寫到Model里面,只是把Model當做一個存儲數據的目的。這時候業務的處理還是需要Controller,這兩種設置其實本身沒有什么高低之分,但是對于咕咚來說還是胖Model更適合一些。

不論是服務端、前端還是客戶端,搜集模式是開發者們都最常用的,資料也相對完全??墒荕VC的架構導致了高耦合和復雜的代碼,為了解決這個問題再引入下一個架構。在MVC里邊,怎么去劃分這個代碼才更加地清晰、更加地合理,唐平麟老師認為 “要嚴格讓Model變成一個胖Model”,這樣便于View Controller不用做復雜的程序就能獲得數據。

但是有些時候在設計框架的時候,并沒有嚴格的去設計,這時就需要引入另外一種模式, MVVM。它僅僅做了一件事情,就是把View Controller拆開了,把View Controller拆成了View Model,把之前Controller對于Model的控制代碼全部放到了View Model里去。如此一來,業務邏輯就會非常地清晰、框架也會更加地明顯。View Controller僅僅是做顯示性的東西,View Model是做業務上的處理, Model可以設計成胖Model,也可以設計成瘦Model,如果設計成胖Model的話,可以把最簡單的邏輯放在Model里面去處理,如果設計成瘦Model的話,可以把全部數據都放到View Model去處理。

MVVM的View Controller不像在MVC里的View Controller,MVVM的是View Controller + View,皆統成一層,而這一層都是做顯示的邏輯。值得注意的是,在做視圖層和View Model層的話,這兩個之間要用一個Data綁定的技術,為了實現這個Data綁定,不能用第三方的庫補充。View Model的角色是處理業務邏輯,除了被View層持有,也會持有Model。簡而言之,View Model是一個從上到下互相持久的關系,在MVC架構里面經常會造成三者之間的相互持有,為了開發過程,可能讓Model、Controller與View之間會產生相互持有的關系。

從MVC一直到MVVM,當程序越來越復雜的時候,開發者們必須嚴格地去定義每一個工作模塊應該干什么,只有這個時候代碼才能更加地清晰可靠。

唐平麟老師在此建議大家,“我希望大家在以后的工作里面,在項目組里面還是傾向于用比較簡單的MVC的架構,但是在項目啟動的時候一定要嚴格區分好這三者之間的關系,這三者之間什么代碼能寫、什么代碼不能寫,什么代碼應該放在什么里面,比如說我Model里面一定要用胖Model,我在Controller里面一定不能夠操作View層的動畫,我在View里面一定不能去寫用戶跟業務代碼相關的邏輯,如果說我們做好這三點的話,我們在MVC里面依然是可以去做架構的。”

【51CTO原創稿件,合作站點轉載請注明原文作者和出處為51CTO.com】

責任編輯:鳶瑋 來源: 51cto
相關推薦

2017-04-26 18:01:52

咕咚MVCMVVM

2021-02-02 10:53:10

技術研發博客

2024-02-05 10:10:06

Vue策略編譯

2019-12-13 16:08:57

戴爾

2025-01-06 12:10:01

2019-03-22 11:07:26

Windows 7Windows 10微軟

2021-05-10 07:30:33

Google技術谷歌

2017-02-27 15:19:04

2020-06-10 09:06:48

MongoDB架構高可用

2022-03-28 11:41:21

物聯網物聯網市場智能電網

2012-07-16 13:18:35

2017-09-22 08:54:42

NB-IoT物聯網商業模式

2022-03-18 13:46:20

物聯網數據技術

2021-11-03 07:27:32

移動管理設備

2017-11-06 08:52:13

管理崗位騰訊

2018-03-29 10:38:14

2011-08-22 10:04:31

LAMP架構

2016-09-27 21:25:08

Go語言Ken Thompso

2022-11-08 08:29:43

Goslog 庫工具

2020-11-05 22:59:15

技能工業革命技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99精品久久 | 99精品一区二区 | 国产精品视频网站 | 免费看91| 亚洲国产在 | 噜久寡妇噜噜久久寡妇 | 国产7777| 1区2区3区视频 | 成人av资源在线 | 日本一区二区在线视频 | 成人免费一级视频 | 久久精品色欧美aⅴ一区二区 | 亚洲免费在线 | 中文字幕在线第二页 | 视频精品一区二区三区 | 福利社午夜影院 | 免费麻豆视频 | 亚洲一区二区三区视频 | 少妇精品久久久久久久久久 | 青青草网站在线观看 | 欧美啪啪 | 亚洲成人一区二区 | 成人区精品一区二区婷婷 | 播放一级黄色片 | 99re在线视频 | 国户精品久久久久久久久久久不卡 | 亚洲欧美视频一区二区 | 日韩高清在线 | 天天躁日日躁狠狠躁白人 | 久在线| 欧美日韩高清在线一区 | 美女中文字幕视频 | 黄色免费网 | 妖精视频一区二区三区 | 亚洲精品2区 | 成年网站在线观看 | 国产欧美一区二区三区日本久久久 | 国产精品欧美一区二区三区不卡 | 成人动慢 | 中文字幕欧美日韩一区 | 一区二区免费 |