- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
精益开发:更富表现力的Model层和重量级数据获取的应对方案
精益开发:更富表现⼒的Model层和重量级数据获取的应对⽅案
我们能够有意识地推断我们想要在哪⼀条想法的溪流中遨游,然⽽此后与那些想法的
触会潜在地塑造我们的习惯和信仰。 -- 《智慧社会》
1.27.1 写在前⾯的话
此篇章有点长,但我认为是值得⼀读的。因为这⾥我将逐步讲述如何在已有的基础上
演变扩展出更⾼层次的代码结构和系统架构,⽽不致于因⽬前频繁的需求变更⽽导致
代码凌乱不堪。更为重要的是,你将能从中发现,如何在⼀个框架中持续演变,最终
体验浮现式设计的乐趣。如果你的项⽬亦能如此,我相信你会找到编程如同搭建积⽊
般轻便明了的感觉。
1.27.2 更富表现⼒的Model层
⼜不尽相同,主要区别在于领域业务数据的处理。⽽数据的来源则更为⼴泛,可能
是来⾃数据库,可能来⾃第三⽅平台 ⼜,可能存放于内存。所以,PhalApi这⾥的
Model层,则是 ⼴义 的数据源层 ,⽤于获取原始的业务数据,⽽不管来⾃何⽅,何
种存储媒介。这也是为什么我们没有将Model层打造成活动纪录或者数据映射器的原
因。当然,如果你确实需要,也可以⾃⾏调整。
如果数据来源于数据库,我们则需要考虑到数据库服务器的感受,保证不会有过载的
请求⽽导致它罢⼯。对此,我们可以结合缓存来进⾏性能优化。
如,⼀般地:
// 版本1:简单的获取
$model = new Model_User();
$rs = $model-getByUserId($userId);
这种是没有缓存的情况,当发现有性能问题并且可以通过缓存来解决时,我们可以在
调⽤时简单引⼊缓存:
// 版本2:使⽤单点缓存/多级缓存 (应该移⾄Model层中)
$key = user aseinfo_ . $userId;
$rs = DI()-cache-get($key);
if ($rs === NULL) {
$rs = $model-getByUserId($userId);
DI()-cache-set($key, $rs, 600);
}
但不建议在领域Domain层中引⼊缓存,因为会导致混淆和不便进⾏测试。更好是将缓
存的处理移⾄Model ,保持数据获取的透明性:
class Model_User extends PhalApi_Model_NotORM {
pu lic function getByUserIdWithCache($userId) {
$key = user aseinfo_ . $userId;
$rs = DI()-cache-get($key);
if ($rs === NULL) {
$rs = $this-getByUserId($userId);
DI()-cache-set($key, $rs, 600);
}
return $rs;
}
对应地,外部的调⽤调整成:
// 版本2:使⽤单点缓存/多级缓存 (应该移⾄Model层中)
$model = new Model_User();
$rs = $model-getByUserIdWithCache($userId);
⾄此,Model层对于上层如Domain来说,负责获取源数据,⽽不管此数据来⾃于数据
库,还是远程 ⼜,抑或是缓存包装下的数据。这正是我们使⽤数组在Model层和
Domain层通讯的原因,因为数组更加通⽤,不需要额外添加实体。
1.27.3 重量级数据获取的应对⽅案
纵使更富表现⼒的Model很好地封装了源数据的获取,但是仍然会遇到⼀些尴尬的问
题。特别地,当我们⼤量地进⾏缓存读取判断时,会出现很多重复的代码,这样既不
雅观也难以管理,甚⾄会出现⼀些简单的⼈为编写错误⽽导致的BUG 。另外,当我们
需要进⾏预览、调试或测试时,我们是不希望看到缓存的,即我们能够⼿⼯指定是否
需要缓存。
这⾥再稍微简单回顾总结⼀下我们现在的问题:我们希望通过缓存策略来优化Model
层的源数据获取,特别当源数据获取的成本⾮常⼤时。但我们又希望我们可以轻易控
制何时需要缓存,何时不需要,并且希望原有的代码能在OCP的原则下不需要修改,
但又能很好地传
您可能关注的文档
- 第17章数据仓库与联.PDF
- 第245期2013年6月01日-6月07日.PDF
- 第24课 河中石兽.ppt
- 第5次中国新媒体受众接触习惯报告.pdf
- 第7课时 实验四练习使用多用电表.ppt
- 第一期(2013.2).PDF
- 第一章领隊技巧.PDF
- 第一讲、中国宪法概况.PDF
- 第七届全国MTS材料试验学术会议纪要.PDF
- 第三方汽车物流龙头企业.PDF
- 初中英语人教版七年级上册第四单元Where is my schoolbag ! Section A .ppt
- 初中英语人教版七年级上册第四单元Where is my schoolbag Section B 2.ppt
- 初中英语人教版七年级下册 Unit 6 I'm watching TV. Section A 11a.pptx
- 注册土木工程师培训课件.ppt
- 初中生物济南版七年级上册第一章奇妙的生命现象 第三节生物学的探究方法.ppt
- 初中英语人教版七年级上册第四单元Where is my schoolbag Section B 2.pptx
- 注册安全工程师案例课件.ppt
- 初中物理人教版八年级上册第二章第4节噪声的危害和控制课件(共19张PPT).pptx
- 注册安全工程师王阳课件.ppt
- 初中数学青岛版八年级上2.4《线段的垂直平分线》课件(16张PPT).ppt
原创力文档


文档评论(0)