动作参数设计/架构不好吗?

时间:2011-03-19 22:26:37

标签: php architecture

这个问题可以应用于任何编程语言,但是当我想到PHP时,我会相应地说出来......

我想知道如果Web应用程序使用操作参数而不是每个操作的单独文件,那么它是否被认为是错误的设计/架构。

例如: /index.php?action=edit

对战

/edit.php或/index/edit.php

我知道mod_rewrite可以将一个漂亮的网址翻译成一个参数化的网址,但是在没有必要时我会尽量避免不必要的复杂性。

感谢。

6 个答案:

答案 0 :(得分:4)

很多时候,对于大型应用程序,(特别是对于Frameworks,例如symfony,Zend Framework,...)我们倾向于使用一个入口点:index.php

该入口点将收到一些信息(如您的action参数),这将允许它将请求路由到正确的控制器(或任何您可能拥有的等效项) )

所以,简而言之:不,使用动作参数也不错设计/架构。
当然,这取决于应用程序的类型 - 但是,一般来说,有一个独特的入口点是一个很好的主意。

答案 1 :(得分:1)

两者都没有任何坏处,两者都可以使用

为小型应用程序分离被认为更好的文件,以避免不必要的复杂性。

行动方式被认为更适合为单一入口点工作的复杂应用程序提供服务,首先初始化所有站点功能,然后调用适当的模块。

我只是要警告你不要以愚蠢的方式使用这样的动作,在主'design'文件的中间做include $_GET['action']。它既不安全又不可靠。

答案 2 :(得分:1)

嗯,我不认为这是一个糟糕的设计 - 当然还有其他可能性 - 但总的来说,这是关于程序员之间的内部协议如何做到的。尽可能多地分割PHP和HTML代码,以便进一步简化开发。

我更喜欢MVC-coding style,它将PHP和HTML彼此分开,就像你“想要它”一样。

希望这有用:)

答案 3 :(得分:1)

我会把你的例子称为至少过时或缺乏最佳实践。

  

/index.php?action=edit

看起来不太好,因此不是用户友好的,也不是SE友好的。

  

/edit.php

意味着每个动作确实只有一个文件,这显然是21世纪的不良做法,我们拥有强大的MVC框架,使我们能够摆脱这种混乱并将问题分开。

一个好的URL看起来像这样的例子:

  

mysite.com/user/profile/edit

表示用户模块中的位置,用户配置文件控制器和编辑操作。

答案 4 :(得分:0)

这取决于您的要求和规模。

使用单独的文件是可以的。但是,您可能会发现自己正在复制代码而没有正确地重用代码和技术。使用小型临时应用程序更容易实现这一点,但随着时间的推移,很可能变成意大利面条代码或丛林巢。

如果您使用单一入口点(使用url处理程序加载类),则必须了解其工作原理(CodeIgniterExpressionEngine是非常好的MVC系统,如果您不是真正擅长它),但它在编码实践中更加一致,并且比一堆单独的页面或你传递一切的switch()语句更好地扩展。

无论哪种方式,它都不是灵丹妙药,但大多数专业操作都使用带有类加载系统的入口点(例如MVC)。

答案 5 :(得分:0)

关于使用 mod_rewrite :未创建mod_rewrite,不应将其用作PHP体系结构的一部分。

关于每个逻辑元素一个文件。这是分离应用程序中逻辑单元的一种非常好的实用方法。它比创建内部具有大量混合逻辑的大型文件更好,随着应用程序的增长,这将变得无法维护。这与一个入口点和MVC架构没有矛盾。

拥有动作参数是CRUD控制器最常用的方法,例如,将动作分组到公共控制器很有意义

// blog controller
-> create blog entry 
-> edit
-> view
-> delete
-> list  ( this is a very common addition to CRUD

所有这些都有一个共同的架构,几乎所有人都接受一个id并做相关的事情。

如果你严格地谈论GET参数而不是你会看到创建中/大应用程序,你从文件中引导所有内容,唯一改变的是get参数将超出你的速度。计算机体系结构就像真正的体系结构一样,试图将东西拆分成小型,简单(可能是可重用的)单元。