【问题标题】:Which architectural pattern am I using?我使用的是哪种架构模式?
【发布时间】:2016-09-30 19:10:21
【问题描述】:

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

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

【问题讨论】:

  • 对我来说这看起来像普通的 OOP。看不到任何特定的架构模式。如果您想知道为什么您的问题被否决,那是因为它与 StackOverflow 无关。这类问题有CodeReview
  • @apokryfos 你好!这个问题与代码审查无关,因为它不是要求审查/改进,而是关于代码本身的属性(它是“架构模式”)。在将用户指向那里之前,请确保您知道 SE 网站的主题是什么!

标签: php architectural-patterns


【解决方案1】:

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

我还建议您阅读这篇文章,以更好地了解 Web 应用程序设计决策: Web Application Design Patterns

从这个链接的列表中,我会说你使用以下设计模式:

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

  • Presentation:监督 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; 你可能想在这里阅读为什么 exit() 是次优的: Best Practice for PHP exit()

无论如何,人们实际上并没有从头开始编写自己的 Web 应用程序架构,而是从 PHP 框架中获得灵感或使用 PHP 框架,这是有原因的:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 2021-07-28
    相关资源
    最近更新 更多