專案總結 Version 1 0(三)

2022-09-02 15:42:25 字數 2022 閱讀 4762

可擴充套件性決定了專案能走多遠,可復用行決定了專案走的是否輕快。

本文主要討論1.0版本的專案在進行設計時對可復用性和可擴充套件性的思考,涉及了整個專案分層的所有層(想查閱分層相關部分的可以點這:專案總結--version 1.0(一)和專案總結--version 1.0(二))。

由於經驗有限,做過多的擴充套件容易誤導其他人,所以本文所做的一些討論總結只限在本專案範圍內進行,對這個專案在進行架構設計的時候遇到的問題和自己的一些想法在此做一些梳理和總結。

同樣的,先從最底層-資料持久層開始說起。先看一下資料持久層的類結構圖:

資料持久層類結構圖

先分別說一下上述類的作用。

fbservertool是乙個單例,在程式執行的時候就進行初始化,這個類將手機端變成乙個伺服器,以供裝置端對手機端的主動連線,在2.0版本中將此功能移除。

fbsockettool同樣是乙個單例,也是在程式執行的時候進行初始化。這個類承擔了兩個功能,一是傳送udp包,二是提供乙個tcp連線。

fbhttptool是乙個封裝了afnetworking的類,它提供了訪問web伺服器常用的靜態方法,類似afn,使用了block**方式。

fbsoaptool封裝了soap協議,soap協議是資料交換協議的一種協議規範,基於xml。更具體詳細的介紹可以看這:soap。通過這層封裝,我們在使用soap協議的時候就可以不必關係具體的協議規範,像使用普通的http來用即可。

寫到這大家應該能看出來某些地方感覺特別不爽,沒錯,我在開始2.0之前看這部分**的時候也有這種感覺。到底哪齣問題了呢?先看一下類名,***tool,第一眼看上去感覺這應該是乙個工具類,裡面的一些方法應該是類方法,但實際上,除了fbhttptool,fbsoaptool,fbwebservice外其他類都是單例!這就有問題了,命名不規範,這會導致其開發者在用到我們這些類的時候需要進入類裡面之後才能理解我們是如何設計的,而不能從名字來進行大概的推斷哪些是單例,哪些是普通類或者相關的工具類。這在其他開發者分析專案,閱讀**的時候會增加不必要的時間成本。

另外,根據單一職責原則,fbsockettool類的功能還應該繼續進行拆分,在2.0版本中,這個類分成了兩個類,乙個負責udp報文收發,乙個負責tcp報文收發。

然後就是fbhttptool,這個類在2.0的版本中變化挺大的,由之前的類方法變成例項方法。這個類負責將afn封裝然後向上層提供簡單的post和get方法,網路訪問的結果在block中進行處理。

fbsoaptool和fbwebservice比較簡單,在兩個版本中幾乎沒有變化,在此就略過不談了。

以上是net模組的部分,接下來說一下dao。這個模組最重要的就兩個部分,乙個是第三方庫fmdb,另外乙個是jkdbmodel。fmdb是乙個非常優秀的第三方庫,極力推薦大家使用學習。jkdbmodel是在fmdb之上又進行封裝了的乙個輕量級的小框架,和蘋果自家的core data使用的orm(物件關係對映)技術比較像,它將類名和資料表,屬性和表字段進行對映,能夠自動建立資料庫和資料表,自動新增新增的表字段,避免了繁瑣的sql語句書寫(雖然有時還是需要些一部分,但已經大大減少工作量了)。原始碼比較簡單,大家可以拿來看看,學習一下,作者的思路還是很棒的。

最後說一下資料快取這一塊,這個地方應該是我的硬傷所在,整個專案看著最不順眼的地方就是它了,在設計這一塊的時候沒有敢設計的很複雜,只是實現了基本的功能,所以資料快取這一塊還需要花時間專門研究一下。設計思路可以看一下前面的這篇文章。

我在進行著一層各個模組的設計的時候盡量的去避免了模組之間橫向的訪問,模組與模組之間需要遵循一套嚴格的規範來相互訪問,不要讓模組之間有太大的耦合度。保持各個模組的獨立性才能在將來擴充套件的時候能夠比較優雅的實現。在設計net和dao這兩個模組的功能的時候,本著單一職責原則(重複好幾次了,希望大家也能夠記住,這個原則對**的可復用性非常重要),不要讓乙個類承擔過多的指責,將粒度劃分的足夠小我們才能很好的復用這些已有的功能。

歡迎加入【ios/swift/oc開發***|127183325】交流學習

專案總結 Version 1 0(一)

歡迎加入 ios swift oc開發 127183325 交流學習。公司專案的1.0版本已經結束有一段時間了,2.0版本也逐漸進入尾聲,從1.0版本結束就計畫著寫一下專案總結,一是對專案進行一下思路梳理,二是總結一下之前的工作,找到所遇到的問題和架構的不合理之處,為接下來的版本做準備。由於2.0版...

Java模擬實現伺服器(Version 1 0)

自己動手寫乙個伺服器,不能說水平會有多大的提公升,但是讓我知道servlet是如何與伺服器進行互動的。現在將簡單的模擬實現記錄下來。此處記錄的是伺服器模擬的簡易版本,以後還會寫乙個利用註解實現的伺服器版本 分析圖 判定引數 if paremter null 將引數放入map集合中 parsepare...

Re 評分規則 Version 1 0發布

quote 先見之明 quote quote 前525年,魯 鄭等國上空出現彗星,喜歡賣弄巫術的裨灶推測宋 衛 陳 鄭四國將要同時發生火災。他請求子產用瓘斝玉瓚祭神以禳除火災。子產沒理會他。後來宋 衛 陳 鄭真的發生大火。裨灶便放出話說 不採納我的建議,鄭國還要發生火災。國人很害怕,懇求子產聽從裨灶...