免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: dualface
打印 上一主题 下一主题

[学习] 单一入口应用程序概述 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2005-11-27 22:04 |只看该作者
用不用 switch 主要取决于是否需要检查包含的文件。即使不用 switch,但使用了一堆 if...else 来检查输入的参数的话,也和 switch 差不多了。也有的用 switch 来简化 module 的名字,Invision Board 两者兼有。

论坛徽章:
0
12 [报告]
发表于 2005-11-27 23:15 |只看该作者
原帖由 imbiss 于 2005-11-27 18:48 发表
不全面。单一入口就是include ($var.inc )的这种方法??(不喜欢主要是觉得不安全。用户可以任意include他要的文件阿)
我的单一入口blog+debug内容,本质上我用的是switch
...



我直接用include只是举例,实际应用中肯定不是这么简单。至少dispatcher必须判断用户提交的参数是否合法有效,然后再include需要的文件。并调用功能代码。

如果你有时间的话,可以看看我在帖子最后推荐的 flea1 应用程序框架,看看 basic.php 文件中 run() 函数是如何实现的(该函数就是一个 Dispatcher)。以及 Controller 类的 execute() 方法(run()函数调用该方法来执行最终的功能代码)。

至于 switch,我继续补充一下:


  1. 假设我根据 $_GET['action'] 参数来判断要执行的功能代码。

  2. switch ($_GET['action']) {
  3.     case 'list':
  4.         // 调用显示列表功能代码
  5.         break;
  6.     case 'create':
  7.         // 调用创建新记录功能代码
  8.         break;
  9.     ..... 更多 case 语句 .....
  10. }

复制代码


上面的代码可以正常工作,但问题在于随着功能的增加,switch 里面的 case 必然越来越多。
如果是多人协作开发,那么 A 程序员增加了一个功能,就必须修改这个 switch 语句。而 B 程序员增加一个功能也要修改这个 switch 语句。由此就会增加发生冲突的可能性,也就是更容易出现麻烦。


另外你提到的安全性问题,我是这样考虑的。

保存功能代码的 .php 文件,并不是直接能够执行的,而是应该由框架来驱动。这样一来,如果用户试图直接访问这些功能代码 .php 文件,也只能得到一个错误信息而已。

更进一步,我们完全可以把功能代码文件放到服务器的其他目录中,从而让浏览器根本就访问不到这些文件。

论坛徽章:
0
13 [报告]
发表于 2005-11-27 23:18 |只看该作者
原帖由 dz902 于 2005-11-27 22:04 发表
用不用 switch 主要取决于是否需要检查包含的文件。即使不用 switch,但使用了一堆 if...else 来检查输入的参数的话,也和 switch 差不多了。也有的用 switch 来简化 module 的名字,Invision Board 两者兼有。


是的,如果你确定只有几种可能情况,那么用 switch 肯定非常简单高效。

所以要根据应用场合来选择合适的设计方案和具体实现。

论坛徽章:
0
14 [报告]
发表于 2005-11-28 00:13 |只看该作者
其实,真没必要。

程序,简单,实现功能就行。

没必要弄得这么复杂。商业程序用这样的模式,只是故意增加复杂度,让别人改不动程序。

我们自己写程序,没必要用单一入口。

软件工程里的思想,就是要模块化,一个功能,一个模块,正好对应WEB开发的一个功能,一个页面。干嘛要弄得这么复杂?

论坛徽章:
0
15 [报告]
发表于 2005-11-28 04:06 |只看该作者
原帖由 ipaddr 于 2005-11-28 00:13 发表
其实,真没必要。

程序,简单,实现功能就行。

没必要弄得这么复杂。商业程序用这样的模式,只是故意增加复杂度,让别人改不动程序。

我们自己写程序,没必要用单一入口。

软件工程里的思想,就是要模 ...




单一入口和模块化没冲突吧?而且单一入口应用程序还要求具有更好的模块化设计。

论坛徽章:
0
16 [报告]
发表于 2005-11-28 09:33 |只看该作者
支持

主要还是关注 快速开发和后期可维护性的考虑,单一入口是最清析的模块结构,所有模块都能从入口文件中反映出来,且不但没有增加复杂度反而让结构变得简单

[ 本帖最后由 hitty 于 2005-11-28 10:31 编辑 ]

论坛徽章:
0
17 [报告]
发表于 2005-11-28 10:25 |只看该作者
嘿嘿,想让自己的程序麻烦点,显得弱智点,
最好使用单一入口。
bennie 该用户已被删除
18 [报告]
发表于 2005-11-28 12:49 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
19 [报告]
发表于 2005-11-28 13:21 |只看该作者
原帖由 ipaddr 于 2005-11-28 00:13 发表
其实,真没必要。

程序,简单,实现功能就行。

没必要弄得这么复杂。商业程序用这样的模式,只是故意增加复杂度,让别人改不动程序。

我们自己写程序,没必要用单一入口。

软件工程里的思想,就是要模 ...


我觉得如果是模块化的却恰恰需要单一入口,这样能够安全快速的引入第三方插件与模块,可以看一下discuz的模块编写,他的模块编写者不需要考虑安全性等问题(按照说明上说的意思,我也没写过,错了别BS我),只要确保模块正确在系统注册,实现功能就行了。

如果一个模块一个入口,那么安全等问题对于那些写PHP的新手来说,是个致命的问题。

论坛徽章:
62
2016科比退役纪念章
日期:2016-06-28 17:45:06奥兰多魔术
日期:2015-05-04 22:47:40菠菜神灯
日期:2015-05-04 22:35:07菠菜神灯
日期:2015-05-04 22:35:02NBA季后赛大富翁
日期:2015-05-04 22:33:34NBA常规赛纪念章
日期:2015-05-04 22:32:032015年亚洲杯纪念徽章
日期:2015-04-14 16:54:452015年亚洲杯之朝鲜
日期:2015-03-19 23:03:16明尼苏达森林狼
日期:2015-03-16 21:51:152015小元宵徽章
日期:2015-03-06 15:57:202015年迎新春徽章
日期:2015-03-04 09:55:282015年辞旧岁徽章
日期:2015-03-03 16:54:15
20 [报告]
发表于 2005-11-28 13:34 |只看该作者
原帖由 litie123 于 2005-11-28 13:21 发表


我觉得如果是模块化的却恰恰需要单一入口,这样能够安全快速的引入第三方插件与模块,可以看一下discuz的模块编写,他的模块编写者不需要考虑安全性等问题(按照说明上说的意思,我也没写过,错了别BS我),只 ...



discuz没有任何版本是统一接口。
的确有做统一接口的产品,但是拿任何成熟的产品做比较都毫无意义,

先想清楚自己有没有能力把代码写到人家的水平?
再看看自己的系统是不是能做成一个成熟的产品,以后不需要修改?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP