-2

我通过 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 用户有权访问的文件存储在数据库中。如果我想在这个前端文件中加载任何动态数据,我会使用 jQuerypostload函数并调用一个后端文件。这个后端文件在大多数情况下包括pg_db_connection,执行一些数据库查询,如果还需要的话 - 对数据做更多的工作(用 HTML 标签包装,或者以某种方式格式化数组然后json_encode它),然后将 HTML 或 JSON 检索到前端文件。然后在 jquery 的 load 或 post 回调方法中,这个 HTML 被写入需要的地方,或者 JSON 以某种方式转换为 HTML 并再次写入 HTML 中的某个位置。

我想知道我是否使用任何已知的架构模式。或者哪种架构模式最接近所描述的方法?

4

1 回答 1

1

据我所知,您的应用程序架构并没有特别遵循任何特定的架构模式。通常,您使用客户端(前端)-服务器(后端)架构,并使用 JavaScript/Ajax 请求从前端获取数据。您使用不指定业务逻辑代码的体系结构...因此无法判断您是否使用 MVC 模式等...查看此链接以了解更多信息: https ://softwareengineering.stackexchange.com /questions/158260/is-there-any-design-pattern-except-mvc-for-web

我还建议您阅读这篇文章,以更好地理解 Web 应用程序设计决策: Web 应用程序设计模式

在此链接的列表中,我会说您使用以下设计模式:

  • 请求处理:页面控制器(显然你有一个单一的入口类,你可以控制身份验证和授权)

  • Presentation : Supervising Presenter(如果我没听错的话,你会在服务器中执行主要逻辑,然后将一些 UI/JSON 内容替换任务等委托给前端 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 框架中获得灵感或使用 PHP 框架,这是有原因的:

  • 让速度发展成为可能
  • 提供组织良好、可重用和可维护的代码
  • 让您随着时间的推移而成长,因为在框架上运行的 Web 应用程序具有可扩展性
  • 免除您对网站低级安全性的担忧
  • 遵循 MVC(模型-视图-控制器)模式,确保表示和逻辑分离
  • 推广现代 Web 开发实践,例如面向对象的编程工具

查看此博客文章中介绍的一些当前现代框架:http: //www.hongkiat.com/blog/best-php-frameworks/ (这也是前面提到的框架使用原因的来源......)也许适合您的用例的东西不会太慢/臃肿/等等...

于 2016-06-01T13:50:33.437 回答