靜態方法 - php 代碼重構疑惑,求解答

來源:互聯網
上載者:User
關鍵字 php 重構 靜態方法
剛寫完一個背景一部分功能,現在打算重構一下代碼,但是有些疑問,不知道該怎麼處理了。

功能描述:
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 訪問而已

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.