摘要: climbPHP是一个基于CodeIginter的框架,下面记录的是我开发的整个思路。【初衷】我终于决定好好写一篇东西来总结一下climbPHP,之前总是觉得没开发完,还不是时候。现在觉得可能永远都是处于没开发完的阶段。最早写climbPHP时的动因很简单,就是想把前端常用的事件类和模块间通过事件类来通信这种模式模式移植到后端来。说白了就是一个全局的观察者模式。写着写着我发现自己的思路得到了新的启发,主要有两点:第一,将系统的任何操作都看作是对外界刺激的反射的话(看《失控》学到的东西),使用事件的方式比起抵用接口来说更容易理解,也更容易表述业务逻辑。第二,引导模块使用事件来通信能它们能更加松耦 阅读全文
posted @ 2012-11-23 20:41 侯振宇 阅读(1249) 评论(3) 推荐(4) 编辑
摘要: 如果世界上真的不存在灵魂这一回事的话。我们就真的只是一种由反射组成的生物而已。大部分人的大部分时间其实都是处于一种无我意识的状态。饿了吃,困了睡。所谓的人的价值仅仅体现在这种反射是有多高级,以及整个人类社会对你评价。但是就我们自己的内心而言,是有公平的评价标准的。那就是你能获得多少你想要的。关于“你想要的”的这个概念,其实也是杜撰。那不妨理解成“究竟什么东西,在你没有得到之前,你会特别想,想得特别就”。对我来说,是保护周围的人的能力。可是当我仔细去想,这种能力究竟是怎样,又不能有一个确定的标准。此时认为是对的东西下一面也许就变了。此时觉得考虑的充分了的事情,十年之后就会觉得如此幼稚。人不是神, 阅读全文
posted @ 2012-11-08 00:38 侯振宇 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 其实写下这篇的时候我自己也没有什么把握到底会坚持多久,我对自己产生了怀疑。看看自己之前做的事情,做了很多,可是也没完成很多。我总是对新东西的兴趣是不用怀疑的。坚持也不用怀疑。只是某个阶段的时候结果出乎意料时就容易失去方向。这是我需要改进的。还有一点需要改进的是容易想当然,他们说的对。我年纪太轻,很多事情没有经历过所以不懂。但是没有经历过也是有机会做好的,只要真的经过了深思熟虑,计划周详。所以,以后对于没有把握的事情一定要深思熟虑,计划周详。比如,这一次。晚安,定个闹钟。我相信你。 阅读全文
posted @ 2012-11-01 23:55 侯振宇 阅读(263) 评论(1) 推荐(0) 编辑
摘要: climbPHPgithub:https://github.com/sskyy/climbPHP这是一个基于codeIgniter的扩展框架,但是主体部分可以非常容易的移植。你想试一下的,只要配置一下数据库连接就行了。它想表达的,更多的是一种代码架构方式。并非几个简单地类库。以下是重点。更好的模块化我所指的模块是module,而不是model。model是业务模型,我们能用它进行一定的业务逻辑操作。而模块应该是系统的组成部分,应该实现三个主要特性: 1.能根据系统事件动态地做出响应。也就是在系统级别应用 “观察者模式” 。 2.能够使用系统统一的规则进行通信。climbPHP使用的是全局的广播 阅读全文
posted @ 2012-09-11 12:07 侯振宇 阅读(1532) 评论(2) 推荐(1) 编辑
摘要: 1.CI在引导文件index.php中设置了“执行环境常量 EVIROMENT”,在值为“development”打开php的全部报错。2.在Common文件中,CI载入了Exception类,该类可以让用户使用show_error等函数主动输出错误。3.在Common文件,CI定义了_exception_handler来自行处理php错误。4.在Exceptions.php中,CI还定义了出php 的标准错误级别意外的级别。在log_exception函数中记录这个级别。 阅读全文
posted @ 2012-07-24 13:02 侯振宇 阅读(292) 评论(0) 推荐(0) 编辑
摘要: 关于PHP事件驱动框架的一些基本信息请先看我上一篇博客基于CodeIgniter的事件驱动扩展和开发规范这里将使用上一篇博客中的写的事件类和规范来写一个简单 用php 和 mysql 模拟文件系统的增删改查 例子。步骤1.数据库设计和基本结构 1.1我们用一张表来表示文件和文件夹,主要字段和意义如下表所示。id文件的唯一标识id name文件名uid文件创建者的idcreated文件创建的时间戳modified文件修改的时间戳size 文件大小type 文件类型pid 文件父目录的idpath文件的物理位置route文件从父目录到根节点的所有祖先id version文件版本... 阅读全文
posted @ 2012-07-03 10:48 侯振宇 阅读(3718) 评论(0) 推荐(0) 编辑
摘要: 最近在做一个网盘的项目,得到了很多经验和教训。总结了一些常见的问题,于是写了下面这样一个小东西来解决。问题项目中为了追求速度和性能,数据库的表设计往往不是满足范式的。这就可能导致在改一个表中项目实体的元信息时,需要同时修改其他表中的信息。比方说:我有一个一张表来表示虚拟的文件(每一行记录表示一个文件),另一个张表用来记录已经发布的文件和生成的外链信息。可能为了少进行一次查表,我们会把文件的一些基本信息,如(文件名,发布人的名字)记录在外链的表中。当修改了文件表中的元信息时,外链表中的信息也需要修改。常见的方法是使用ORM,但如果我还需要“根据具体情况再决定要修改其他表中的元信息”这种情况时,O 阅读全文
posted @ 2012-06-27 11:27 侯振宇 阅读(4018) 评论(4) 推荐(1) 编辑
摘要: 1.软件的前期准备分为“需求准备”和“构建准备”,两者都有系统的规范。code complete中对这两者都提出了详细的确认方法。这里的确认方法并非戒律,而更像备忘。2.在构建活动中的设计部分,书中提出了几大范围,我个人觉得划分得非常详细。在具体的实践过程中,设计应该是一层一层往里迭代的,每一次都应该适当把这些范围考虑一遍。3.在设计一节中,提到了我认为最有价值一个观点,就是“任何技术为题都没有 管理复杂度 重要,软件设计的首要问题是管理复杂度。”4.写代码对程序员来说是一种诱惑,要学会控制。5.对于不熟悉的问题,设计详细到无法再设计了,才是足够了。6.我认为的比较适合web开发前期准备工作应 阅读全文
posted @ 2012-06-21 00:16 侯振宇 阅读(260) 评论(0) 推荐(0) 编辑
摘要: 不了解jquery deferred对象的先google一下“javascript promise模式”和“jquery deferred对象”。搜到的几篇都讲得比较详细了。一下只列出常见的用途。1.我有两个异步操作f1和f2,f2需要依赖f1异步返回的结果,不写成回调,如何做?先考虑我希望写成的样子://f3用来确定f2返回的结果f1().pipe(f2).then(f3); 再看f1和f2实现就很简单了:var f1 = function(){ var _i = $.Deferred(); setTimeout(function(){ _... 阅读全文
posted @ 2012-06-14 09:51 侯振宇 阅读(369) 评论(0) 推荐(0) 编辑
摘要: 这两天在做的项目中需要对用户输入的日期进行匹配,匹配的格式范围 包括:2001.4.3六月五号七月十五一一年四月三日二零一三年五月六日01年3月7日2011年3月31日今天、明天、下周一、周六使用的是正则来处理,值得注意的是再utf8编码下,正则使用\u选项就能在表达式中直接输入中文。一下贴出代码: 1 //时间标识%6.5% 2 private function analyze_time( $content ){ 3 $time = false; 4 5 if( preg_match( '/%.*?%/', $content, $m... 阅读全文
posted @ 2012-06-13 09:27 侯振宇 阅读(402) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示