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

php中文网
发布: 2016-06-06 20:12:13
原创
1133人浏览过

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

立即学习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层也是静态方法, 我该如何封装?

回复内容:

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

立即学习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缓存。

那么这个逻辑 应该在DataHandler 中处理,你向外部暴露的应该只是获取设备的信息就可以了,外部应用不应关心你是否用了缓存或者用什么缓存,是redis还是别的.这样将来即使你存取缓存的逻辑变了也可以不用修改外部代码,比如不用db了,直接在redis落地或者其他什么方案

2.是否使用静态方法和你这个问题好像关系不大,你先搞清楚你为什么使用静态方法.因为你只给了局部信息,我没法判断你是否有使用静态方法的必要.再者如果必须使用 可以在DataHandler 中使用静态方法.后面的Cache,DB就没必要使用了,因为他们的接口不对外提供访问仅供 DataHandler 访问而已

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号