日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

移动应用开发—— 如何搭建开发大型的应用架构?

發布時間:2023/11/27 生活经验 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 移动应用开发—— 如何搭建开发大型的应用架构? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ?什么是一個好的應用架構?怎么才能搭建大型的應用架構?其實每個人在工作幾年之后都會有這個疑問,都在尋求好點的框架,那么小編我總結一下我的經驗給大家。

? ? ?其實對于客戶端,一個好的應用架構,復雜度不亞于服務端,因為需要承載需求和產品的變更,如果前期沒弄好,后期要么成爛尾,要么就重構去吧~~性質其實和服務端是差不多的,客戶端側重于邏輯和框架。

? ? 其實搭建架構,不單單要考慮到實際成本和產品的需求,更重要的是支撐這些事情的基礎,這就是做架構要考慮的事情。

  • 調用網絡API
  • 頁面展示
  • 數據的本地持久化
  • 動態部署方案
  • 代碼的健壯性
  • 數據的安全性
? ? ?稍微細說一下比較重要的:
  • 如何根據業務安全地調用網絡API?然后盡可能保證用戶在各種網絡環境下都能有良好的體驗?都能有良好的體驗?都能有良好的體驗?重要的事情要說三遍。
  • 降低業務方代碼的耦合度?降低開發界面的復雜度,提高他們的效率?
  • 如何盡可能地減小性能消耗?如何有效的保存數據?更要保證數據的有效性?
  • 如何修復嚴重bug?
  • 如何更新需求不一樣的第二個版本?

這系列文章主要是回答以下這些問題:

  1. 網絡層設計方案?設計網絡層時要考慮哪些問題?對網絡層做優化的時候,可以從哪些地方入手?
  2. 頁面的展示、調用和組織都有哪些設計方案?我們做這些方案的時候都要考慮哪些問題?
  3. 本地持久化層的設計方案都有哪些?優劣勢都是什么?不同方案間要注意的問題分別都是什么?
  4. 要實現動態部署,都有哪些方案?不同方案之間的優劣點,他們的側重點?

那首先大伙要明白的是設計原則,避重就輕,什么是避重就輕?先來說下我從其它網站看到一篇比較好的文章,如下藍色字體部分

架構設計的方法


所有事情最難的時候都是開始做的時候,當你開始著手設計并實現某一層的架構乃至整個app的架構的時候,很有可能會出現暫時的無從下手的情況。以下方法論是我這些年總結出來的經驗,每個架構師也一定都有一套自己的方法論,但一樣的是,不管你采用什么方法,全局觀、高度的代碼審美能力、靈活使用各種設計模式一定都是貫穿其中的。

? ? ? ? ?第一步:搞清楚要解決哪些問題,并找到解決這些問題的充要條件

你必須得清楚你要做什么,業務方希望要什么。而不是為了架構而架構,也不是為了體驗新技術而改架構方案。以前是MVC,最近流行MVVM,如果過去的MVC是個好架構,沒什么特別大的缺陷,就不要推倒然后搞成MVVM。

關于充要條件我也要說明一下,有的時候系統提供的函數是需要額外參數的,比如read函數。還有翻頁的時候,當前頁碼也是充要條件。但對于業務方來說,這些充要條件還能夠再縮減。

比如read,需要給出file descriptor,需要給出buf,需要給出size。但是對于業務方來說,充要條件就只要file descriptor就夠了。再比如翻頁,其實業務方并不需要記錄當前頁號,你給他暴露一個loadNextPage這樣的方法就夠了。

搞清楚對于業務方而言的真正充要條件很重要!這決定了你的架構是否足夠易用。另外,傳的參數越少,耦合度相對而言就越小,你替換模塊或者升級模塊所花的的代價就越小。

? ? ? ? ? ?第二步:問題分類,分模塊

這個不用多說了吧。

? ? ? ? ? ?第三步:搞清楚各問題之間的依賴關系,建立好模塊交流規范并設計模塊

關鍵在于建立一套統一的交流規范。這一步很能夠體現架構師在軟件方面的價值觀,雖然存在一定程度上的好壞優劣(比如胖Model和瘦Model),但既然都是架構師了,基本上是不會設計出明顯很爛的方案的,除非這架構師還不夠格。所以這里是架構師價值觀輸出的一個窗口,從這一點我們是能夠看出架構師的素質的。

另外要注意的是,一定是建立一套統一的交流規范,不是兩套,不是多套。你要堅持你的價值觀,不要搖擺不定。要是搞出各種五花八門的規范出來,一方面有不切實際的炫技嫌疑,另一方面也會帶來后續維護的災難。

?第四步:推演預測一下未來可能的走向,必要時添加新的模塊,記錄更多的基礎數據以備未來之需

很多稱職的架構師都會在這時候考慮架構未來的走向,以及考慮做完這一輪架構之后,接下來要做的事情。一個好的架構雖然是功在當代利在千秋的工程,但絕對不是一個一勞永逸的工程。軟件是有生命的,你做出來的架構決定了這個軟件它這一生是坎坷還是幸福。

第五步:先解決依賴關系中最基礎的問題,實現基礎模塊,然后再用基礎模塊堆疊出整個架構

這一步也是驗證你之前的設計是否合理的一步,隨著這一步的推進,你很有可能會遇到需要對架構進行調整的情況。這個階段一定要吹毛求疵高度負責地去開發,不要得過且過,發現架構有問題就及時調整。否則以后調整的成本就非常之大了。

? ? ? ??第六步:打點,跑單元測試,跑性能測試,根據數據去優化對應的地方

你得用這些數據去向你的boss邀功,你也得用這些數據去不斷調整你的架構。

總而言之就是要遵循這些原則:自頂向下設計(1,2,3,4步),自底向上實現(5),先測量,后優化(6)。


什么樣的架構叫好架構?


  1. 代碼整齊,分類明確,沒有common,沒有core
  2. 不用文檔,或很少文檔,就能讓業務方上手
  3. 思路和方法要統一,盡量不要多元
  4. 沒有橫向依賴,萬不得已不出現跨層訪問
  5. 對業務方該限制的地方有限制,該靈活的地方要給業務方創造靈活實現的條件
  6. 易測試,易拓展
  7. 保持一定量的超前性
  8. 接口少,接口參數少
  9. 高性能

以上是我判斷一個架構是不是好架構的標準,這是根據重要性來排列的。客戶端架構跟服務端架構要考慮的問題和側重點是有一些區別的。下面我會針對每一點詳細講解一下:



代碼整齊,分類明確,沒有common,沒有core

代碼整齊是每一個工程師的基本素質,先不說你搞定這個問題的方案有多好,解決速度有多快,如果代碼不整齊,一切都白搭。因為你的代碼是要給別人看的,你自己也要看。如果哪一天架構有修改,正好改到這個地方,你很容易自己都看不懂。另外,破窗理論提醒我們,如果代碼不整齊分類不明確,整個架構會隨著一次一次的拓展而越來越混亂。

分類明確的字面意思大家一定都了解,但還有一個另外的意思,那就是:不要讓一個類或者一個模塊做兩種不同的事情。如果有類或某模塊做了兩種不同的事情,一方面不適合未來拓展,另一方面也會造成分類困難。

不要搞Common,Core這些東西。每家公司的架構代碼庫里面,最惡心的一定是這兩個名字命名的文件夾,我這么說一定不會錯。不要開Common,Core這樣的文件夾,開了之后后來者一定會把這個地方搞得一團糟,最終變成Common也不Common,Core也不Core。要記住,架構是不斷成長的,是會不斷變化的。不是每次成長每次變化,都是由你去實現的。如果真有什么東西特別小,那就索性為了他單獨開辟一個模塊就好了,小就小點,關鍵是要有序。



不用文檔,或很少文檔,就能讓業務方上手

誰特么會去看文檔啊,業務方他們已經被產品經理逼得很忙了。所以你要盡可能讓你的API名字可讀性強,對于iOS來說,objc這門語言的特性把這個做到了極致,函數名長就長一點,不要緊。


    好的函數名:- (NSDictionary *)exifDataOfImage:(UIImage *)image atIndexPath:(NSIndexPath *)indexPath;壞的函數名:- (id)exifData:(UIImage *)image position:(id)indexPath callback:(id<ErrorDelegate>)delegate;為什么壞?1. 不要直接返回id或者傳入id,實在不行,用id<protocol>也比id好。如果連這個都做不到,你要好好考慮你的架構是不是有問題。2. 要告知業務方要傳的東西是什么,比如要傳Image,那就寫上ofImage。如果要傳位置,那就要寫上IndexPath,而不是用position這么籠統的東西3. 沒有任何理由要把delegate作為參數傳進去,一定不會有任何情況不得不這么做的。而且delegate這個參數根本不是這個函數要解決的問題的充要條件,如果你發現你不得不這么做,那一定是架構有問題!



思路和方法要統一,盡量不要多元

解決一個問題會有很多種方案,但是一旦確定了一種方案,就不要在另一個地方采用別的方案了。也就是做架構的時候,你得時刻記住當初你決定要處理這樣類型的問題的方案是什么,以及你的初衷是什么,不要搖擺不定。

另外,你當初設立這個模塊一定是有想法有原因的,要記錄下你的解決思路,不要到時候換個地方你又靈光一現啥的,引入了其他方案,從而導致異構。

要是一個框架里面解決同一種類似的問題有各種五花八門的方法或者類,我覺得做這個架構的架構師一定是自己都沒想清楚就開始搞了。



沒有橫向依賴,萬不得已不出現跨層訪問

沒有橫向依賴是很重要的,這決定了你將來要對這個架構做修補所需要的成本有多大。要做到沒有橫向依賴,這是很考驗架構師的模塊分類能力和是否熟悉業務的。

跨層訪問是指數據流向了跟自己沒有對接關系的模塊。有的時候跨層訪問是不可避免的,比如網絡底層里面信號從2G變成了3G變成了4G,這是有可能需要跨層通知到View的。但這種情況不多,一旦出現就要想盡一切辦法在本層搞定或者交給上層或者下層搞定,盡量不要出現跨層的情況。跨層訪問同樣也會增加耦合度,當某一層需要整體替換的時候,牽涉面就會很大。



對業務方該限制的地方有限制,該靈活的地方要給業務方創造靈活實現的條件

把這點做好,很依賴于架構師的經驗。架構師必須要有能力區分哪些情況需要限制靈活性,哪些情況需要創造靈活性。比如對于Core Data技術棧來說,ManagedObject理論上是可以出現在任何地方的,那就意味著任何地方都可以修改ManagedObject,這就導致ManagedObjectContext在同步修改的時候把各種不同來源的修改同步進去。這時候就需要限制靈活性,只對外公開一個修改接口,不暴露任何ManagedObject在外面。

如果是設計一個ABTest相關的API的時候,我們又希望增加它的靈活性。使得業務方不光可以通過Target-Action的模式實現ABtest,也要可以通過Block的方式實現ABTest,要盡可能滿足靈活性,減少業務方的使用成本。



易測試易拓展

老生常談,要實現易測試易拓展,那就要提高模塊化程度,盡可能減少依賴關系,便于mock。另外,如果是高度模塊化的架構,拓展起來將會是一件非常容易的事情。



保持一定量的超前性

這一點能看出架構師是否關注行業動態,是否能準確把握技術走向。保持適度的技術上的超前性,能夠使得你的架構更新變得相對輕松。

另外,這里的超前性也不光是技術上的,還有產品上的。誰說架構師就不需要跟產品經理打交道了,沒事多跟產品經理聊聊天,聽聽他對產品未來走向的暢想,你就可以在合理的地方為他的暢想留一條路子。同時,在創業公司的環境下,很多產品需求其實只是為了趕產品進度而產生的妥協方案,最后還是會轉到正軌的。這時候業務方可以不實現轉到正規的方案,但是架構這邊,是一定要為這種可預知的改變做準備的。



接口少,接口參數少

越少的接口越少的參數,就能越降低業務方的使用成本。當然,充要條件還是要滿足的,如何在滿足充要條件的情況下盡可能地減少接口和參數數量,這就能看出架構師的功力有多深厚了。



高性能

為什么高性能排在最后一位?

高性能非常重要,但是在客戶端架構中,它不是第一考慮因素。原因有下:


  • 客戶端業務變化非常之快,做架構時首要考慮因素應當是便于業務方快速滿足產品需求,因此需要盡可能提供簡單易用效果好的接口給業務方,而不是提供高性能的接口給業務方。
  • 蘋果平臺的性能非常之棒,正常情況下很少會出現由于性能不夠導致的用戶體驗問題。
  • 蘋果平臺的優化手段相對有限,甚至于有些時候即便動用了無所不用其極的手段乃至不擇手段犧牲了穩定性,性能提高很有可能也只不過是100ms到90ms的差距。10%的性能提升對于服務端來說很不錯了,因為服務端動不動就是幾十萬上百萬的訪問量,幾十萬上百萬個10ms是很可觀的。但是對于客戶端的用戶來說,他無法感知這10ms的差別,如果從10s優化成9s用戶還是有一定感知的,但是100ms變90ms,我覺得吧,還是別折騰了。


但是!不重要不代表用不著去做,關于性能優化的東西,我會對應放到各系列文章里面去。比如網絡層優化,那就會在網絡層方案的那篇文章里面去寫,對應每層架構都有每層架構的不同優化方案,我都會在各自文章里面一一細說。



? ?

————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

其實分層這種東西,真沒啥技術含量,全憑架構師的經驗和素質。


我們常見的分層架構,有三層架構的:展現層、業務層、數據層。也有四層架構的:展現層、業務層、網絡層、本地數據層。這里說三層四層,跟TCP/IP所謂的五層或者七層不是同一種概念。再具體說就是:你這個架構在邏輯上是幾層那就幾層,具體每一層叫什么,做什么,沒有特定的規范。這主要是針對模塊分類而言的。

也有說MVC架構,MVVM架構的,這種層次劃分,主要是針對數據流動的方向而言的。

在實際情況中,針對數據流動方向做的設計和針對模塊分類做的設計是會放在一起的,也就是說,一個MVC架構可以是四層:展現層、業務層、網絡層、本地數據層。

那么,為什么我要說這個?米奇云科技?

大概在五六年前,業界很流行三層架構這個術語。然后各種文檔資料漫天的三層架構,并且喜歡把它與MVC放在一起說,MVC三層架構/三層架構MVC,以至于很多人就會認為三層架構就是MVCMVC就是三層架構。其實不是的。三層架構里面其實沒有Controller的概念,而且三層架構描述的側重點是模塊之間的邏輯關系。MVCController的概念,它描述的側重點在于數據流動方向。



好,為什么流行起來的是三層架構,而不是四層架構五層架構


因為所有的模塊角色只會有三種:數據管理者數據加工者數據展示者,意思也就是,籠統說來,軟件只會有三層,每一層扮演一個角色。其他的第四層第五層,一般都是這三層里面的其中之一分出來的,最后都能歸納進這三層的某一層中去,所以用三層架構來描述就比較普遍。



那么我們怎么做分層?


應該如何做分層,不是在做架構的時候一開始就考慮的問題。雖然我們要按照自頂向下的設計方式來設計架構,但是一般情況下不適合直接從三層開始。一般都是先確定所有要解決的問題,先確定都有哪些模塊,然后再基于這些模塊再往下細化設計。然后再把這些列出來的問題和模塊做好分類。分類之后不出意外大多數都是三層。如果發現某一層特別龐大,那就可以再拆開來變成四層,變成五層。


舉個例子:你要設計一個即時通訊的服務端架構,怎么分層?

記住,不要一上來就把三層架構的規范套上去,這樣做是做不出好架構的。

你要先確定都需要解決哪些問題。這里只是舉例子,我隨意列出一點意思意思就好了:

  1. 要解決用戶登錄、退出的問題
  2. 解決不同用戶間數據交流的問題
  3. 解決用戶數據存儲的問題
  4. 如果是多臺服務器的集群,就要解決用戶連接的尋址問題


解決第一個問題需要一個鏈接管理模塊,鏈接管理模塊一般是通過鏈接池來實現。 解決第二個問題需要有一個數據交換模塊,從A接收來的數據要給到B,這個事情由這個模塊來做。 解決第三個問題需要有個數據庫,如果是服務于大量用戶,那么就需要一個緩沖區,只有當需要存儲的數據達到一定量時才執行寫操作。 解決第四個問題可以有幾種解決方案,一個是集群中有那么幾臺服務器作為尋路服務器,所有尋路的服務交給那幾臺去做,那么你需要開發一個尋路服務的Daemon。或者用廣播方式尋路,但如果尋路頻次非常高,會造成集群內部網絡負載特別大。這是你要權衡的地方,目前流行的思路是去中心化,那么要解決網絡負載的問題,你就可以考慮配置一個緩存。

于是我們有了這些模塊:

鏈接管理、數據交換、數據庫及其配套模塊、尋路模塊

做到這里還遠遠沒有結束,你要繼續針對這四個模塊繼續往下細分,直到足夠小為止。但是這里只是舉例子,所以就不往下深究了。

另外,我要提醒你的是,直到這時,還是跟幾層架構毫無關系的。當你把所有模塊都找出來之后,就要開始整理你的這些模塊,很有可能架構圖就是這樣:


    鏈接管理  收發數據                     收發數據數據交換                       /        \ \   鏈接管理        數據交換尋路服務          ========\                   /  \========/            數據庫服務   尋路服務數據庫服務           / 

然后這些模塊分完之后你看一下圖,嗯,1、2、3,一共三層,所以那就是三層架構啦。在這里最消耗腦力最考驗架構師功力的地方就在于:找到所有需要的模塊,?把模塊放在該放的地方

這個例子側重點在于如何分層,性能優化、數據交互規范和包協議、數據采集等其他一系列必要的東西都沒有放進去,但看到這里,相信你應該了解架構師是怎么對待分層問題的了吧?


對的,答案就是沒有分層。所謂的分層都是出架構圖之后的事情了。所以你看別的架構師在演講的時候,上來第一句話差不多都是:"這個架構分為以下幾層..."。但考慮分層的問題的時機絕對不是一開始就考慮的。另外,模塊一定要把它設計得獨立性強,這其實是門藝術活。


另外,這雖然是服務端架構,但是思路跟客戶端架構是一樣的,側重點不同罷了。之所以不拿客戶端架構舉例子,是因為這方面的客戶端架構蘋果已經幫你做好了絕大部分事情,沒剩下什么值得說的了。



————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————


關于Common文件夾?


評論區MatrixHero提到一點:


關于common文件夾的問題,僅僅是文件夾而已,別無他意。如果后期維護出了代碼混亂可能是因為,和服務器溝通協議不統一,或代碼review不及時。應該有專人維護公共類。


這是針對我前面提出的不要Common,不要Core而言的,為什么我建議大家不要開Common文件夾?我打算分幾種情況給大家解釋一下。

一般情況下,我們都會有一些屬于這個項目的公共類,比如取定位坐標,比如圖像處理。這些模塊可能非常小,就h和m兩個文件。單獨拎出來成為一個模塊感覺不夠格,但是又不屬于其他任何一個模塊。于是大家很有可能就會把它們放入Common里面,我目前見到的大多數工程和大多數文檔里面的代碼都喜歡這么做。在當時來看,這么做看不出什么問題,但關鍵在于:軟件是有生命,會成長的。當時分出來的小模塊,很有可能會隨著業務的成長,逐漸發展成大模塊,發展成大模塊后,可以再把它從Common移出來單獨成立一個模塊。這個在理論上是沒有任何問題的,然而在實際操作過程中,工程師在拓張這個小模塊的時候,不太容易會去考慮橫向依賴的問題,因為當時這些模塊都在Common里面,直接進行互相依賴是非常符合直覺的,而且也不算是不遵守規范。然而要注意的是,這才是Commom代碼混亂的罪魁禍首,Common文件夾縱容了不精心管理依賴的做法。當Common里面的模塊依賴關系變得復雜,再想要移出來單獨成立一個模塊,就不是當初設置Common時想的等規模大了再移除也不遲那么簡單了。


另外,Common有的時候也不僅僅是一個文件夾。


在使用Cocoapods來管理項目庫的時候,Common往往就是一個pod。這個pod里面會有A/B/C/D/E這些函數集或小模塊。如果要新開一個app或者Demo,勢必會使用到Common這個pod,這么做,往往會把不需要包含的代碼也包含進去,我對項目有高度潔癖,這種情況會讓我覺得非常不舒服。




舉個例子:早年安居客的app還不是集齊所有新房二手房租房業務的。當你剛開始寫新房這個app的時候,創建了一個Common這個pod,這里面包含了一些對于新房來說比較Common的代碼,也包含了對于這個app來說比較Common的代碼。過了半年或者一年,你要開始二手房這個app,我覺得大多數人都會選擇讓二手房也包含這個Common,于是這個Common很有可能自己走上另一條發展的道路。等到了租房這個業務要開app的時候,Common已經非常之龐大,相信這時候的你也不會去想整理Common的事情了,先把租房搞定,于是Common最終就變成了一坨屎。

就對于上面的例子來說,還有一個要考慮的是,分出來的三個業務很有可能會有三個Common,假設三個Common里面都有公共的功能,交給了三個團隊去打理,如果遇到某個子模塊需要升級,那么三個Common里面的這個子模塊都要去同步升級,這是個很不效率的事情。另外,很有可能三個Common到最后發展成彼此不兼容,但是代碼相似度非常之高,這個在架構上,是屬于分類條理不清

就在去年年中的時候,安居客決定將三個業務歸并到同一個App。好了,如果你是架構師,面對這三個Common,你打算怎么辦?要想最快出成果,那就只好忍受代碼冗余,趕緊先把架子搭起來再說,否則你面對的就是剪不斷理還亂的Common。此時Common就已經很無奈地變成一坨屎了。這樣的Common,你自己說不定也搞不清楚它里面到底都有些什么了,交給任何一個人去打理,他都不敢做徹底的整理的。




還有就是,Common本身就是一個粒度非常大的模塊。在阿里這樣大規模的團隊中,即便新開一個業務,都需要在整個app的環境下開發,為什么?因為模塊拆分粒度不夠,要想開一個新業務,必須把其他業務的代碼以及依賴全部拉下來,然后再開新入口,你的新業務才能進行正常的代碼編寫和調試。然而你的新業務其實只依賴首頁入口、網絡庫等這幾個小模塊,不需要依賴其他那么多的跟你沒關系的業務。現在每次打開天貓的項目,我都要等個兩三分鐘,這非常之蛋疼。

但是大家真的不知道這個原因嗎?知道了這個原因,為什么沒人去把這些粒度不夠細的模塊整理好?在我看來,這件事沒人敢做。

  1. 原來大家用的好好的,手段爛就爛一點,你改了你能保證不出錯?
  2. 這么復雜的東西,短期之內你肯定搞不好,任務量和工時都不好估,你leader會覺得你在騙工時玩自己的事情。
  3. 就算你搞定了,QA這邊肯定再需要做一次全面的回歸測試,任務量極大,難以說服他們配合你的工作。

花這么大的成本只是為了減少開啟項目時候等待IDE打開時的那幾分鐘時間?我想如果我是你leader,我也應該不會批準你做這樣的事情的。所以,與其到了后面吃這個苦頭,不如一開始做架構的時候就不要設置Common,到后面就能省力很多。架構師的工作為什么是功在當代利在千秋,架構師的素質為什么對團隊這么重要?我覺得這里就是一個最好的體現。




簡而言之,不建議開Common的原因如下:

  1. Common不僅僅是一個文件夾,它也會是一個Pod。不管是什么,在Common里面很容易形成錯綜復雜的小模塊依賴,在模塊成長過程中,會縱容工程師不注意依賴的管理,乃至于將來如果要將模塊拆分出去,會非常的困難。
  2. Common本身與細粒度模塊設計的思想背道而馳,屬于一種不合適的偷懶手段,在將來業務拓張會成為阻礙。
  3. 一旦設置了Common,就等于給地獄之門打開了一個小縫,每次業務迭代都會有一些不太好分類的東西放入Common,這就給維護Common的人帶來了非常大的工作量,而且這些工作量全都是體力活,非常容易出錯。


那么,不設Common會帶來哪些好處?


  1. 強迫工程師在業務拓張的時候將依賴管理的事情考慮進去,讓模塊在一開始發展的時候就有自己的土壤,成長空間和靈活度非常大。
  2. 減少各業務模塊或者Demo的體積,不需要的模塊不會由于Common的存在而包含在內。
  3. 可維護性大大提高,模塊升級之后要做的同步工作非常輕松,解放了那個苦逼的Common維護者,更多的時間可以用在更實質的開發工作上。
  4. 符合細粒度模塊劃分的架構思想。

Common的好處只有一個,就是前期特別省事兒。然而它的壞處比好處要多太多。不設置Common,再小的模塊再小的代碼也單獨拎出來,最多就是Podfile里面要多寫幾行,多寫幾行最多只花費幾分鐘。但若要消除Common所帶來的罪孽,不是這幾分鐘就能搞定的事情。既然不用Common的好處這么多,那何樂而不為呢?

假設將來你的項目中有一個類是用來做Location的,哪怕只有兩個文件,也給他開一個模塊就叫Location。如果你的項目中有一個類是用來做ImageProcess的,那也開一個模塊就叫ImageProcess。不要都放到Common里面去,將來你再開新的項目或者新的業務,用Location就寫依賴Location,用ImageProcess就寫依賴ImageProcess,不要再依賴Common了,這樣你的項目也好管理,管理Common的那個人日子過得也輕松(這個人其實都可以不需要了,把他的工資加到你頭上不是更好?:),將來要升級的話,顧慮也少。



除了數據轉化以外,reformer要解決的問題還有以下幾點:

1. 多數據源到單view的數據轉化(租房列表API,新房列表API,二手房API到同一個tableview的數據轉化)

2. 單數據源到多view的數據轉化(附近房源API數據轉化成MapView或tableview)

3. 轉化邏輯的代碼在多業務甚至多app情況下復用



米奇云科技 ?

轉載請注明:http://blog.csdn.net/djy1992/article/details/48315757



轉載于:https://www.cnblogs.com/wuwuwu/p/6162635.html

總結

以上是生活随笔為你收集整理的移动应用开发—— 如何搭建开发大型的应用架构?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。