> 백엔드 개발 > PHP 튜토리얼 > 静态方法 - php 代码重构疑惑,求解答

静态方法 - php 代码重构疑惑,求解答

WBOY
풀어 주다: 2016-06-06 20:12:13
원래의
1006명이 탐색했습니다.

刚写完一个后台的一部分功能,现在打算重构一下代码,但是有些疑问,不知道该怎么处理了。

功能描述:
1.用户下面有设备和分组,设备可以被分组,然后分组之间的设备可以相互透传数据。设备上线,查找redis有没有缓存过用户、分组、设备,如果缓存过只是简单更新一下缓存的个别数据,如果没有那么先从数据库里面查找,查找后redis缓存。
2.现在是分别用UserCache、GroupCache、DeviceCache 三个类,实现缓存的读写,UserDB、GroupDB、DeviceDB三个类实现数据库的读写。且它们的方法都是静态方法,在Server中直接调用它们的方法。

重构:现在想把Cache层和DB层再封装一下,例如DeviceDataHandler 封装DeviceCache和DeviceDB,在Server中直接调用DeviceDataHandler进行设备数据存取方面的处理。

<code>例如: Server中收到一个设备上线数据,现在处理是 
(1)Server先调用DeviceDB的getDeviceInfo方法从数据库里取设备信息.
(2)Server再调用DevieCache的cacheDeviceInfo方法缓存数据。 
现在想Server直接用DeviceDataHandler 的 deviceOnLineMsg()方法完成上面两步的处理。
</code>
로그인 후 복사
로그인 후 복사

疑惑: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进行设备数据存取方面的处理。

<code>例如: Server中收到一个设备上线数据,现在处理是 
(1)Server先调用DeviceDB的getDeviceInfo方法从数据库里取设备信息.
(2)Server再调用DevieCache的cacheDeviceInfo方法缓存数据。 
现在想Server直接用DeviceDataHandler 的 deviceOnLineMsg()方法完成上面两步的处理。
</code>
로그인 후 복사
로그인 후 복사

疑惑: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 访问而已

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿