关于 DiggMore & Zend Framework 的讨论
这几天不少同学在 phpe.net 上对 DiggMore & Zend Framework 进行了激烈的讨论,这里需要先对 DiggMore 说明一下。最初对 DiggMore 的想法是因为 binzy 和我都觉得我们应该提供一个平台,让国内的 phpers 能够通过这个平台了解到 PHP 相关的各方面咨询,甚至可以在此基础上进行交流讨论,为国内 phpers 的共同进步而努力。通过交流,我们觉得 Digg 的方式非常合适,可以让大家都参与进来,也可以让有用的信息上浮。正当我们准备开始 DiggMore 的工作时,Zend Framework 恰好发布,这也是一个机会,可以在 DiggMore 的开发中顺带应用 ZF,但是,ZF 并不是这个项目的全部,我们可能会用到 ZF 的 Controller、DB、Feed 等等,但我们不想让 DiggMore 强依赖于 ZF。接下来就是这个上面这个帖子讨论的问题了,ZF 的 Controller 并不能让我们满意,因为对于 Action 无法测试,另外正如 binzy 所说:
Zend_Controller_Front作为最前的门面, 缺乏Flexable. 因为很显然你需要根据不同的request去load不同的信息, 去add不同的Zend_Controller_Plugin. 即Zend_Front缺乏可配置性, 从Zend Framework的MailList中可以看到有Configuration相关的Proposal, 但是什么时候出来是另外一回事情了. 所以建议在Zend_Controller_Front前再加一层, 去实现Zend_Front没有做的那些事情, 即Load Configuration, Add不同的Plugins, 即创建Request所对应的Zend_Controller_Front的实例.
这导致了我们开始“改造” ZF 的 FrontController 部分,说是“改造”,但实际上我们并没有“入侵” ZF 的任何代码,在中间增加了 FrontInterface、Action、ResultType 等等接口。
帖子的讨论中让我比较失望的是,我一再地强调减少依赖、松耦合、测试优先等等,但却很少得到回应,而更多的是在讨论 image、js、view 的目录结构问题,我觉得这些目录结构都不是重点,我并不关心这些,因为一个可配置的系统平台,这些问题很容易处理,而且目录结构并没有一个必须遵循的原则,如果说有的话,那就是用户不需要访问到的文件都放到发布目录之外,呵呵,这个也算不上什么大原则。
从讨论中我开始发现其实我们(至少是 phpe 上的 phpers)相对于其它语言的讨论落后了许多,本身 PHP 在 OO 方面起步就比较晚,而 phpers 中实际懂得 OO,晓得设计模式,应用敏捷开发原则的人实在是少之又少,这不免让我对国内 PHP 的发展有些担忧(但愿是杞人忧天)。语言并不是软件开发的障碍,编程思想才是障碍,为什么我们不能多学习一下 Java、C++、.Net 等等呢,比如 Java 方面,已经有很多成熟应用设计模式案例、项目及讨论,而我们还在闭门造车,继续着复制粘贴、重复开发的机械工作。希望 DiggMore 能为大家带来一些启发,即使是一丁点的,我觉得都是成功的,毕竟我们敲开了第一块砖。
