关于单一入口应用程序(网络笔记)

以颜色标识分别是:重点概念 思想突破点 注意要点

什么是单一入口应用程序

在解释什么是单一入口应用程序之前,我们先来看看传统的 web 应用程序
news.php 显示新闻列表
news_edit.php 显示新闻编辑页面
这两个页面不但分别实现了两个功能,还成为了应用程序的两个入口。

那什么是入口啊?
打个比方,大家上 WC,都是男生进一个门,女生进一个门。这两个门就是 WC 的两个入口。

呵呵,上面的例子应该很好理解吧。那稍微变换一下,单一入口的概念就很容易理解了。
现在我们是进一个公共 WC,不管男女都是从最外面的入口进入,交了钱以后才分别进两个门。那最外面的入口就是这个 WC 的单一入口。

所以单一入口的应用程序实际上就是说用一个文件处理所有的 HTTP 请求。例如不管是新闻列表功能还是新闻编辑功能,都是从浏览器访问 index.php 文件。这个 index.php 文件就是这个应用程序的单一入口。

index.php 如何知道用户是要使用哪一个功能呢?

很简单,我们访问 index.php 时跟上一个特定的参数就行了。例如 index.php?action=news 就是显示新闻列表,而 index.php?action=news_edit 就是新闻编辑

而在 index.php 里面,仅用两行代码就可以实现这种效果。

1
2
$action = $_GET['action'] == '' ? 'index' : $_GET['action'];
include('files/' . $action . '.php');

上面的代码中,第一行是从 url 中取出 action 参数。如果没有提供 action 参数,就设置一个默认的 ‘index’ 作为参数。
第二行代码就是根据 $action 参数调用不同的代码文件,从而实现单一入口对应不同功能的效果。

单一入口应用程序的入口文件很复杂?

有些朋友可能以为单一入口程序的 index.php 会像面条一样复杂,其实是误解。
例如我现在的应用程序入口文件只有下面几行:

1
2
3
4
5
define('APP',       realpath('../libs/website'));
define('LANG',      'gb2312');
define('DEBUG',     1);
require('../libs/flea1/basic.php');
run();

足够简单了吧?

当然了,在 index.php 里面写上一长串 switch case 绝对是拙劣的实现方式。但这纯粹是开发者自己的设计和实现问题,而不是单一入口应用程序这种设计思想的问题。

补充说明: 这里提到 switch case 并不是说用了 switch 就代表“落后”、“土气”等。只是说在 index.php 这个入口程序里面写上一堆 switch case 不利于程序的修改和维护,所以是一种不好的用法

2 Responses to 关于单一入口应用程序(网络笔记... »

  1. 量子 评论 2008-08-14 08:55

    这种结构我一直使用,结构清晰…

    回复

    joe 回复 八月 14th, 2008 at 09:00

    我还是在学皮毛。。。

    回复

Leave a Reply

Email address is not published

You should say a Chinese word to pass spam check. If you can not input Chinese, just copy 你好 and paste them into comment text box.