关于 DiggMore & Zend Framework 的讨论

Posted on 22nd May 2006 by Nio in 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 能为大家带来一些启发,即使是一丁点的,我觉得都是成功的,毕竟我们敲开了第一块砖。

Apache2+SVN

Posted on 19th April 2006 by Nio in DiggMore, 程序人生

由于 binzy 无法在公司 check out DiggMore 的 CVS,所以下午的时候商量在我的机器上装一个 Subversion,而且这个 Subversion 中的仓库必须可以通过 HTTP 方式操作,晚上回来之后开始折腾,现记录如下。

先安装 Apache2,之前的还是 Apache 1.3.x:

# ./configure --prefix=/usr/local/apache2 --sysconfdir=/etc --enable-so --enable-rewrite --enable-dav --enable-dav-fs
# make
# make install

安装 Apache2 的同时还连累了 PHP,只好也一起重新编译。

然后安装 Subversion:

# ./configure --with-apr=/usr/local/apache2 --with-apr-util=/usr/local/apache2 --with-apxs=/usr/local/apache2/bin/apxs
# make
# make install

修改 httpd.conf,加入:

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

这两个 module 是安装 SVN 时带的。

创建 SVN 仓库:

svnadmin create /path/to/diggmore

注意:需要把仓库的属主、权限设置成 apache 中的 User/Group 可读写访问。

利用 apache 自带的 htpasswd 生成可访问用户的列表文件,这个文件中包含了用户名及其 MD5 之后的密码:

# htpasswd -cm /etc/svn-auth-file nio
New password: *****
Re-type new password: *****
Adding password for user nio

如果还需要添加新的用户,继续使用:

# htpasswd -m /etc/svn-auth-file binzy

注意,这一次不再使用 -c 参数,这个参数是用来新建文件的,所以第二个用户开始就不需要这个参数了,否则会重新创建文件,把第一个用户给去掉了。

接下来做一个简单的配置,使得任何人都可以有读的权限,但只有 diggmore 开发成员可以写,这需要创建一个访问控制文件,假设为 /etc/svn-access-file。文件内容大概如下:

[/]
* = r

[groups]
diggmore = nio, binzy, easy, vicki, freeman, rainx

[diggmore:/]
@diggmore = rw

第一、二行表示任何人都可以读 SVN 仓库,[groups] 用来定义组,我这里定义了一个 diggmore 组,组成员包括 nio, binzy, ….,[diggmore:/] 部分表示 diggmore 仓库中的权限定义,组 diggmore 拥有这个仓库的读写权限。OK,就是这么简单。

现在,回到 httpd.conf,我们还要加一些配置:

<Location /diggmore>
  DAV svn
  # 指定仓库路径
  SVNPath /path/to/diggmore
  # 指定使用的访问控制文件
  AuthzSVNAccessFile /etc/svn-access-file
  # 首先尝试匿名访问,只在有需要的时候才使用基本验证方式验证用户权限
  Satisfy Any
  Require valid-user
  # 使用基本验证
  AuthType Basic
  AuthName "Nio's SVN"
  # 验证使用的用户列表文件
  AuthUserFile /etc/svn-auth-file
</Location>

好了,就这些了,最后别忘了重启 apache 服务。现在你可以通过 http://…./diggmore 的方式访问 SVN 了,当然我的配置有细微差别,所以访问 diggmore 的 SVN,使用这个地址:

http://www.infor96.com/svn/diggmore/

客户端亦相同。现在看着还比较简单,有时间装一个 Trac 或其它,就可以方便地通过浏览器进行代码浏览了。