开始创建 QeePHP 应用程序(2)
时间:2008-04-12 来源:qeeify
在本教程的第一篇,我们通过 QeePHP 的应用程序生成工具获得了一个应用的雏形。在开始实际编程之前,我们要耐心的做一点准备工作。
虽然我们不是做一个真的 digg.com 网站,但我们最好还是写一个清单,列明需要实现哪些功能。这可是一个非常好的习惯,即便是小程序也应该这样做。
清单很简单:
- 用户可以稍后修改自己提交的“收藏”
- 用户可以对一个“收藏”发表评论
- 用户可以 digg 一个“收藏”,“收藏”每被 digg 一次,就增加一点 digg 值
- 同一个用户对于同一个“收藏”只能 digg 一次
- 用户可以修改自己的密码
- 用户需要注册并登录后才能进行上述操作
- 访问者可以查看所有的“收藏”
- 访问者可以点击“收藏”中的链接转到“收藏”的来源网址
- 根据“收藏”的添加时间和 digg 值,生成最新的和最热门的“收藏”列表页面
- 为列表页面生成 RSS,为“收藏”阅读页生成该“收藏”所有评论的 RSS
根据上面的功能清单,我们的 digg 应用需要下面几个对象:
- User:用来保存用户的登录名、登录密码等信息
- Favorite:封装了收藏的来源网址、标题和介绍文字
- Comment:封装用户针对收藏提交的评论
- Digg:封装是谁对一个收藏进行了 digg 行为
暂时我们只考虑这四个对象,以便能够尽快开始实际的工作并看到成效。至于未考虑到的细节,则在以后通过重构来完成。
这四个类的关系很简单:
User 对象有多个 Favorite 对象,而 Favorite 对象有多个 Comment 对象和 Digg 对象。同时,Comment 对象和 Digg 对象也关联到 User 对象。
对象间的关系如下图:
创建数据结构
除了明确需要的对象及对象间的关系,还要创建合适的数据表来保存这些对象:
注意其中的 diggs 表有两个主键字段,用于限制一个用户对同一个收藏仅能 digg 一次。
上述四个表的 SQL 如下:
CREATE TABLE users
(
user_id INTEGER NOT NULL AUTO_INCREMENT,
username VARCHAR(20) NOT NULL COMMENT '用户名',
password VARCHAR(70) NOT NULL COMMENT '加密后的密码',
created DATETIME NOT NULL COMMENT '账户创建时间',
updated DATETIME NOT NULL COMMENT '账户最后更新的时间',
PRIMARY KEY (user_id),
UNIQUE (username)
) ;
CREATE TABLE favorites
(
fav_id INTEGER NOT NULL AUTO_INCREMENT,
user_id INTEGER NOT NULL COMMENT '发布收藏的用户ID',
title VARCHAR(240) NOT NULL COMMENT '收藏的标题',
url VARCHAR(240) NOT NULL COMMENT '收藏的来源网址',
intro TEXT NOT NULL COMMENT '收藏的简介',
digg_count INTEGER NOT NULL DEFAULT 0 COMMENT 'digg 值',
comments_count INTEGER NOT NULL DEFAULT 0 COMMENT '收藏的评论数',
created DATETIME NOT NULL COMMENT '收藏提交的时间',
updated DATETIME NOT NULL COMMENT '收藏最后更新的时间',
PRIMARY KEY (fav_id)
) ;
CREATE TABLE comments
(
comment_id INTEGER NOT NULL AUTO_INCREMENT,
fav_id INTEGER NOT NULL COMMENT '评论所属收藏ID',
user_id INTEGER NOT NULL COMMENT '提交评论的用户ID',
body TEXT NOT NULL COMMENT '评论内容',
created DATETIME NOT NULL COMMENT '提交评论的时间',
PRIMARY KEY (comment_id)
) ;
CREATE TABLE diggs
(
user_id INTEGER NOT NULL,
fav_id INTEGER NOT NULL,
created DATETIME NOT NULL COMMENT '用户digg的时间',
PRIMARY KEY (user_id, fav_id)
) ;
可以看到,对象的类名称都是单数,而数据表都是复数形式。虽然不要求一定这样,但稍微规范一点也不是坏事,对吧 :)
要注意的是,数据表的主键字段都不是简单的“id”,而是加上了前缀,例如“user_id”、“fav_id”等。这样做的好处是在定义对象间的关联时,不需要我们去指定用哪一个字段的值来确定关联,QeePHP 会自己猜测出来。
ok,现在分析整理工作基本上就做好了。下一篇教程我们将通过 QeePHP 实际操作数据库,看看 QeePHP 是如何简化开发工作的。
原文地址:
http://qeeify.com/index.php/2008/03/19/begin-app-2.html
更多信息,请访问 FleaPHP/QeePHP 开源开发框架官方网站:
http://www.fleaphp.org/
。
- User:用来保存用户的登录名、登录密码等信息
相关阅读 更多 +
排行榜 更多 +