剛寫完一個背景一部分功能,現在打算重構一下代碼,但是有些疑問,不知道該怎麼處理了。
功能描述:
1.使用者下面有裝置和分組,裝置可以被分組,然後分組之間的裝置可以相互透傳資料。裝置上線,尋找redis有沒有緩衝過使用者、分組、裝置,如果緩衝過只是簡單更新一下緩衝的個別資料,如果沒有那麼先從資料庫裡面尋找,尋找後redis緩衝。
2.現在是分別用UserCache、GroupCache、DeviceCache 三個類,實現緩衝的讀寫,UserDB、GroupDB、DeviceDB三個類實現資料庫的讀寫。且它們的方法都是靜態方法,在Server中直接調用它們的方法。
重構:現在想把Cache層和DB層再封裝一下,例如DeviceDataHandler 封裝DeviceCache和DeviceDB,在Server中直接調用DeviceDataHandler進行裝置資料存取方面的處理。
例如: Server中收到一個裝置上線資料,現在處理是 (1)Server先調用DeviceDB的getDeviceInfo方法從資料庫裡取裝置資訊.(2)Server再調用DevieCache的cacheDeviceInfo方法快取資料。 現在想Server直接用DeviceDataHandler 的 deviceOnLineMsg()方法完成上面兩步的處理。
疑惑:1.Cache層和DB層中都會有一些靜態方法,如果在Server中統一隻調用DataHandler方法處理資料,那麼會導致DataHandler中有些方法只是對Cache層和DB層方法的簡單調用,這樣反而增加了工作量,並沒有其它的作用。 那麼我是保持現狀不重構了,還是重構到DataHandler中,讓DataHandler作為資料存取的對外介面?
2:如果封裝到DataHandler中還是用靜態方法嗎? 那麼就是DataHandler中是靜態方法,Cache、DB層也是靜態方法, 我該如何封裝?
回複內容:
剛寫完一個背景一部分功能,現在打算重構一下代碼,但是有些疑問,不知道該怎麼處理了。
功能描述:
1.使用者下面有裝置和分組,裝置可以被分組,然後分組之間的裝置可以相互透傳資料。裝置上線,尋找redis有沒有緩衝過使用者、分組、裝置,如果緩衝過只是簡單更新一下緩衝的個別資料,如果沒有那麼先從資料庫裡面尋找,尋找後redis緩衝。
2.現在是分別用UserCache、GroupCache、DeviceCache 三個類,實現緩衝的讀寫,UserDB、GroupDB、DeviceDB三個類實現資料庫的讀寫。且它們的方法都是靜態方法,在Server中直接調用它們的方法。
重構:現在想把Cache層和DB層再封裝一下,例如DeviceDataHandler 封裝DeviceCache和DeviceDB,在Server中直接調用DeviceDataHandler進行裝置資料存取方面的處理。
例如: Server中收到一個裝置上線資料,現在處理是 (1)Server先調用DeviceDB的getDeviceInfo方法從資料庫裡取裝置資訊.(2)Server再調用DevieCache的cacheDeviceInfo方法快取資料。 現在想Server直接用DeviceDataHandler 的 deviceOnLineMsg()方法完成上面兩步的處理。
疑惑:1.Cache層和DB層中都會有一些靜態方法,如果在Server中統一隻調用DataHandler方法處理資料,那麼會導致DataHandler中有些方法只是對Cache層和DB層方法的簡單調用,這樣反而增加了工作量,並沒有其它的作用。 那麼我是保持現狀不重構了,還是重構到DataHandler中,讓DataHandler作為資料存取的對外介面?
2:如果封裝到DataHandler中還是用靜態方法嗎? 那麼就是DataHandler中是靜態方法,Cache、DB層也是靜態方法, 我該如何封裝?
個人認為
1.有必要封裝,你前面說道
裝置上線,尋找redis有沒有緩衝過使用者、分組、裝置,如果緩衝過只是簡單更新一下緩衝的個別資料,如果沒有那麼先從資料庫裡面尋找,尋找後redis緩衝。
那麼這個邏輯 應該在DataHandler 中處理,你向外部暴露的應該只是擷取裝置的資訊就可以了,外部應用不應關心你是否用了緩衝或者用什麼緩衝,是redis還是別的.這樣將來即使你存取緩衝的邏輯變了也可以不用修改外部代碼,比如不用db了,直接在redis落地或者其他什麼方案
2.是否使用靜態方法和你這個問題好像關係不大,你先搞清楚你為什麼使用靜態方法.因為你只給了局部資訊,我沒法判斷你是否有使用靜態方法的必要.再者如果必須使用 可以在DataHandler 中使用靜態方法.後面的Cache,DB就沒必要使用了,因為他們的介面不對外提供訪問僅供 DataHandler 訪問而已