文章目录
  1. 1. 开发思路
  2. 2. 表结构
  3. 3. 功能的实现
    1. 3.1. X 关注的人
    2. 3.2. 关注 X 的人
    3. 3.3. 刷微博
    4. 3.4. 前端
  4. 4. 总结

暑假实习第一周的事情,就是搭个简单的微博 Demo 来熟悉组里常用的框架了。这个 Demo 的功能有以下几个

  • 用户登录 / 注册
  • 发布 / 删除微博
  • 关注 / 取消关注用户
  • 查看所有关注者的微博
  • 查看所有关注我的用户
  • 查看某位用户的个人信息和他发送的微博

即便加了刚报到那几天自己机器送修导致不得不使用厂里 Windows 环境的 Debuff,这些基本的功能也可以在一周内实现。不过虽然简单,但作为一个典型的数据库驱动应用,在开发它过程里还是有一些经验值得记录分享。

开发思路

一个 Web 应用的开发大致有两种思路:自底向上和自顶向下,也就是要么从实现后端功能开始,逐步加上前端的页面效果;要么从前端设计静态页面开始,逐步在后端把功能实现。

这次由于时间比较急并且注重的是具体功能的实现,所以选择了从后端开始的思路,大体上是这样的一个流程:

  1. 根据一开始的需求来设计表结构。
  2. 根据表结构写出需要的几个 SQL 语句,验证设计的可行性。
  3. 在后台的开发环境里(这里还是用的 PHP)建立和表对应的数据对象(相当于 MVC 的 Model),每个表对应一个数据对象。
  4. 实现每张表对应的数据对象的若干接口(比如用 getUser($userId) 获取用户或者用 getWeibo($weiboId) 获取微博),在数据对象里完成 SQL 的拼接。
  5. 实现各个功能对应的控制器,每个控制器会调用一个或多个数据对象的接口,最终完成一开始列出的这些需求。
  6. 控制器将数据获取到后,通过模板将数据按模板格式渲染呈现,实现数据和逻辑的分离。

这个流程里,由于具体实现增查改删的 SQL 语句都被封装在了数据对象中,因此对联表查询等需要查询多张表的功能,只要通过控制器调用不同的数据对象就可以实现。这个封装对开发和调试都有很大的帮助。而模板的使用也也避免了在 HTML 中频繁嵌入 PHP 的尴尬,需求更改时会更容易维护得多。

表结构

对于基本的微博应用,下面的三张表就足够表示数据的关系了:

  1. users 用于存储用户数据。
  2. weibos 用于存储微博数据。
  3. followers 用于存储关注数据。

一开始的时候本来是想为关注分配两张表 followingfollower 从而让「关注我的」和「我关注的」分别只要一句 SQL 来实现。但这样一来在每次添加关注关系的时候都需要写两张表,并且需要两个重复的数据对象来处理这两张表,这样的冗余设计并不好。

最后几个关键的字段是这样的:

  1. users 表:user_id
  2. weibos 表:weibo_id / user_id
  3. followers 表:id_user / id_follower

这样就足够实现几个关键功能了。

功能的实现

下面是几个核心的功能的实现,由于只是 Demo,因此都只是很基本的 SQL 啊。

X 关注的人

SELECT id_follower FROM follower WHERE id_user = X;

关注 X 的人

SELECT id_user FROM follower WHERE id_follower = X;

刷微博

SELECT * FROM weibos WHERE user_id IN
(SELECT id_follower FROM follower WHERE id_user = X);

前端

由于这次用了数据驱动的开发方式,就没有花心思折腾前端的布局了,从前端到后端的数据传递也采用了朴素的 <form><input name="xxx"> 来实现基本的 POST。不过在调试的时候,有一个简单的 CSS 样式可以迅速让这样纯 HTML 样式的网页看起来好不少。

body {
margin: auto;
max-width: 400px;
}

总结

首先这个 Demo 的完成品肯定存在分分钟被花样注入的安全问题,所以就留着自己玩玩吧……框架确实是举一反三,了解一个以后就可以快速上手的东西,所以还是打好基础比较重要。

请教导师的时候,把问题描述或定位清楚,不仅可以节约对方的时间,也可以增加自己的理解呢。

文章目录
  1. 1. 开发思路
  2. 2. 表结构
  3. 3. 功能的实现
    1. 3.1. X 关注的人
    2. 3.2. 关注 X 的人
    3. 3.3. 刷微博
    4. 3.4. 前端
  4. 4. 总结