惊闻
惊闻Webwork和Struts准备合体, 然后画了一个叫Struts Ti的大饼. 无论好与不好, 我反正继续用我的webwork2.1/2.2. Ti嘛, 等大家都用了再说好了.
惊闻John Vlissides去世. Gang of Four之一. 默哀一下.
惊闻Webwork和Struts准备合体, 然后画了一个叫Struts Ti的大饼. 无论好与不好, 我反正继续用我的webwork2.1/2.2. Ti嘛, 等大家都用了再说好了.
惊闻John Vlissides去世. Gang of Four之一. 默哀一下.
1. container
现在提到container, 最容易让人想到的估计是IoC container了. 大红大紫的IoC继续红火着, 占据着大量的市场份额. 而我对这个container的依赖也日益加重. Autowire也大肆加重了我的懒惰. 懒没有坏处, 只是总觉得还不够懒.
那天在club.phpe.net上有人在问, 能否有一种方式由页面(模板)主动得去请求. 就像一种页面级别的autowire了. 但必然带来大量约束. 如Webpart和Portalet.
2. framework
framework并不是说做就能做出来的. 特别的, 请不要把带有自己实验性质的framework随意公开, 更多的应该在有限的人群中进行着讨论, 测试, 改进. 当在有限的人群中得到认可再公开不迟. 至少得要告诉别人, 这个还不要相信, 因为指不定自己哪天都会丢弃这个东西. 当然在不断摸索中不断进步是必然的.
3. rails
rails系列其实并不能算是framework, 就像appfuse一样, 更多的像是个tool, 一个raid develop的工具. 就rail系列的特点而言就是核心是一个simple的orm (active record)和一个simple的mvc. 而且有着大量的限制. 去年迷恋自己创造php的orm, mvc及自己的php framework的时候曾写出大量的相似代码. 然后就是一个接一个的否定. 约束太多.
4. our php
那时候公司的php的开发框架是由Avenger一手搭建起来的, 对于这个历史悠久的框架我和av都有着一向以来改变或者流行一点说就是重构它的想法. 之前的结构大概如下:
一个admin.php加上一个基类mod_main, 即充当frontcontroller, 又充当Reource Loader, 还充当Permission Filter, 并还要负责输出. Resource基本分为Global的和Module的, 主要包括语言和DB. 一般开发的时候就是写一个mod_main的子类, 调用一些封装好的方法, 然后进行一个模块一个模块的开发. 其实挺简单的, 开发好模块, 然后配置进系统, 然后设置权限, 便开始工作了. 以这种方式下, 已经开发了大量的模块了. 于是开始很头痛, 最大的一个PHP文件已然101K, 2400多行. 每每看着就觉得头大如毛…… 另外一点就是耦合太高, 实在难测试, 别说unittest了.
于是改造工作终于开始. 把Action抽象出来, 搞个ActionRunner用于执行, 同时根据不同的ActionResult而调用各自的ResultTypeProcessor进行处理, 并处理过的返回结果. admin.php和mod_main职责不变, 继续充当原先的角色. NewModule按照原来的规则继承mod_main, 并负责调用一个简陋的Contanier(只能显示的代码注入)来创建并autowire DAO及Action, 当然在PHP中autowire肯定是只能byName的. Container抽象出接口, 并由Context统一调用, 以便随时替换掉这个简陋的container的具体实现. Context根据不同的环境(Console Or Web)创建Request的实例. 另外写了一个Action的测试基类, 负责初始化Action所要load的resource. 至此, 改造工作基本完成. PHP未必需要xml, 因为对于PHP程序员来说他们对php代码肯定更加熟悉. 而且php代码解释性的特点, 所改即所得. 而且偷懒, 所以还是选择显式的代码形式的注入. 支持简单的init和destory.要在PHP中彻底引入Application和Lifecycle概念并不容易.
4. php
其实php一直以来开发模式不能转变的原因之一就在于没有一个application的概念, 而所有的生命周期就在于一个一个Page, 而Page的生命周期你完全不能控制… 于是传统的PHP开发总是一个Page一个Page. 后来慢慢的一个模式在PHP开发中大行其道, 就是FrontController模式. 我想引入FrontController模式的初衷应该就是为了Application的概念, 为了能控制PHP执行的顺序, 甚至Lifecycle.
5. mvc
一般的MVC分为请求驱动和事件驱动. 其实要做到一个好的MVC不算是难事, 但要做到一个大家都喜欢的MVC就难了, 因为表面的东西, 大家都特喜欢鸡蛋里挑骨头. 就像我老是顽固地认为事件驱动容易增加代码的复杂度, 不适合web. :p
IoCphpmvc
英扎吉又进球了. 英扎吉是我很喜欢的球员之一. 他的跑位实在值得学习, 而且可以看到他全场不停的奔跑. 米兰买到pipo, 真的值. 据说pipo因为肌肉比较特殊, 不能跑步只能骑车, 呵呵, 看来特殊还真是有特殊的好处.
昨天找地方喝酒, BBF有活动, 门票120, 想想还是罢了, 就去了附近的Rojam. 想来也久闻大名, 不过有些大失所望, 还不如去windows(非茂名路那家), 酒还便宜…… 有些亏大. 以后还是少喝酒了. 胃和身体都有些承受不来了.
AC米兰 pub
真正的PHP5-> PHP5.1终于发布了. 伴随着性能的提升的是估计一直以来最大的一个ChangeLog. 我个人比较关注的几点:
1. VM的优化带来的性能提升, 终于扳回了PHP5.0的颜面.
2. PDO日益成熟, 终成为Default的”extension”, 至此PHP终于有了一个不错的Database Access Layer.
3. PEAR 1.4成为绑定版本. PEAR 1.4较之前有了较大变化, 如加入了Channel机制.
4. 另外在opcode, IO, SPL等各方面也有较多更新. 暂时还不知道Serializable接口有什么具体作用.
官方也有一份详尽的Upgrade Note: Upgrade Note
PHP PEAR
安装了一个插件, 叫taggerati
挺好用的.
My Tips:
1. install
2. create tag page
3. modify index and single page
4. use invisible tag is more comfortable.