我通过PHP开发了web应用程序,而不使用任何框架。我的应用程序主要有两种类型的文件——前端和后端。第一种类型可能包含HTML、PHP、CSS、JavaScript(jQuery)和仅限后台的PHP。我有一个名为pg_db_connection
的类,它与数据库连接,还有一个类session
,它创建用户的web会话(php的函数session_start()
),并在users
数据库表中维护一些变量,如"用户名"、用户id等。
pg_db_connection
类具有属性$link
,该属性是从pg_connect()
获得的数据库资源。这个类还有一些函数,如query($query, $b_result = false, &$affected_rows = null)
、insert($table, $values, $columns = null, &$affected_rows = null)
、begin()
、commit()
、rollback()
等等。在每个前端文件的开头,我创建类型为session
的对象,并执行:
$db = new pg_db_connection($db_config,$log_mng);
$session = new session($db);
#if the session is not active go to login.php frontend and force the user to login
if(!$session->is_active())
{
header("Location: /html/admin/login.php?url=" . urlencode($_SERVER['REQUEST_URI']));
exit;
}
# If session is active proceed below
# Auto refresh the session
$session->autoReresh();
# Check if the current user have privileges to access this frontend file (second param is file path, third - file name)
if(!($session->passpermit($session->user_id(), $_SERVER['SERVER_ADDR'], dirname(__FILE__)."/", basename(__FILE__))))
{
header("Location: /html/admin/access_denied.html");
exit;
}
会话类将user_id, username
和更多存储在$_SESSION
中。需要连接到数据库,因为web用户有权访问的文件存储在数据库中。如果我想在这个前端文件中加载任何动态数据,我会使用jQuery的post
或load
函数,并调用一个后端文件。在大多数情况下,这个后端文件包括pg_db_connection
,如果需要的话,执行一些数据库查询-对数据做更多的工作(用HTML标签包装,或者以某种方式格式化数组,然后json_encode
),然后将HTML或JSON检索到前端文件。然后,在jquery的加载或后回调方法中,在需要的地方编写HTML,或者以某种方式将JSON转换为HTML,然后再次在HTML中的某个地方编写。
我想知道我是否使用了任何一种已知的建筑模式。或者哪种体系结构模式最接近所描述的方法?
据我所知,您的应用程序体系结构没有特别遵循任何特定的体系结构模式。通常,您使用客户端(前端)-服务器(后端)架构,并通过JavaScript/Ajax请求从前端获取数据。您使用不指定业务逻辑代码的体系结构。。。所以没有办法判断你是否使用MVC模式等等。。。查看此链接了解更多信息:https://softwareengineering.stackexchange.com/questions/158260/is-there-any-design-pattern-except-mvc-for-web
我还建议您阅读这篇文章,以更好地了解web应用程序设计决策:Web应用程序设计模式
从这个链接中的列表中,我想说你使用了以下设计模式:
-
请求处理:页面控制器(显然您有一个控制身份验证和授权的单一入口类)
-
演示:监督演示者(如果我说得对,你在服务器中执行主要逻辑,但你随后将一些UI/JON-内容替换任务等委派给前端JavaScript)
-
页面布局(UI):转换/两步视图(您用jQuery创建了一些JSON中的HTML,对吗?)
-
持久性:事务数据存储(因为您使用了begin()、commit()、rollback())
一些批评: pg_db_connection暗示你必须使用postgres db?…所以你不能轻易地切换数据库。。。并且您必须处理容易出错且具有安全风险的低级别SQL查询。。。自定义会话处理也相当容易出错,有很多坑掉落。。。例如
header("Location: /html/admin/login.php?url=" . urlencode($_SERVER['REQUEST_URI']))
可能导致重定向漏洞。。。我甚至不想知道你在login.php中做什么…
关于退出您可能想在这里阅读为什么exit()是次优的:PHP exit()的最佳实践
不管怎样,人们之所以不从头开始编写自己的web应用程序架构,而是受到PHP框架的启发或使用它,这是有原因的:
- 让速度发展成为可能
- 提供组织良好、可重用和可维护的代码
- 让您随着时间的推移而成长,因为在框架上运行的web应用程序是可扩展的
- 免除您对站点低级别安全性的担忧
- 遵循MVC(模型-视图-控制器)模式,确保表示和逻辑的分离
- 促进现代web开发实践,如面向对象编程工具
查看本博客文章中介绍的一些当前现代框架:http://www.hongkiat.com/blog/best-php-frameworks/(这也是前面提到的框架使用原因的来源…)也许有些东西适合你的用例,而不会太慢/太臃肿等等。。。