Maison >développement back-end >tutoriel php >静态方法 - php 代码重构疑惑,求解答
刚写完一个后台的一部分功能,现在打算重构一下代码,但是有些疑问,不知道该怎么处理了。
功能描述:
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 访问而已