根据经验丰富的开发人员的建议,我总是将需要用户输入(表单处理,数据库管理等)的网页编码为自引用页面.对于PHP页面,我将表单的操作设置为预定义变量的'PHP_SELF'
元素$_SERVER
,并且根据我传递的参数,页面逻辑确定要执行的代码块.
我喜欢所有代码都包含在一个文件中,而不是传播到各种结果页面.我发现的一个问题是我的统计数据解析程序无法区分页面的第一个视图和后续视图(例如,表单已提交时).很久以前,当我使用CGI或CF创建页面时,我将用户引导到一个不同的结果页面,该页面非常巧妙地显示了实际使用该表单的次数.
Web开发中这些类型页面的最佳实践是什么?使用(或不使用)自引用页面还有其他更有说服力的理由吗?
我认为,正如你所说的那样,自我引用的页面并没有遵循适当的关注点分离.你在同一个页面上做了两件不同的事情,在这两个不同的页面中,你可以更清晰地分离逻辑.
MVC(模型 - 视图 - 控制器,http://en.wikipedia.org/wiki/Model-view-controller)框架强调了这种做法,例如Ruby on Rails,Django和ASP.NET MVC(我不喜欢)我知道任何PHP的东西,但我相信有一些).
这也是RESTful(REpresentational State Transfer)实践的基本特征,其中每个URL代表一个资源和一个要用该资源执行的操作.另一方面,自引用页面每个URL /页面将具有"2"个动作,例如"新"(以使表单填写)和"创建"(以实际创建对象).
为网站实践MVC和RESTful(http://en.wikipedia.org/wiki/RESTful)实践通常会产生更清晰的代码并更好地分离关注点.这很重要的原因是它使测试更容易(并且通过测试我的意思是单元和功能测试,而不是"在我的浏览器上尝试页面"测试).
统计数据的混乱是一个例子,说明如何不分离您的问题会导致意外的复杂性.有些人可能会通过尝试检测请求的引用来查看此问题,并查看它是否是同一页面.这些都只是解决症状的代码绷带,而不是解决问题.如果您在网站的不同页面中保留不同的"操作",您可以将这些页面集中在他们的1个工作上,并确保他们做得很好,而不是使用各种条件和其他复杂性来完全避免代码混乱. 1页只有1个工作.