我使用的是哪种架构模式?

时间:2016-06-01 12:10:26

标签: php architectural-patterns

我开发了Web应用程序,没有使用PHP的任何框架。我的应用程序主要有两种类型的文件 - 前端和后端。第一种类型可能包含HTML,PHP,CSS,JavaScript(jQuery)和后端 - 只有PHP。我有一个名为pg_db_connection的类与数据库建立连接,一个类session创建用户的网络会话(php的函数session_start())并维护一些变量,如“username”,用户的id in users数据库表等。

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中的某处编写。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

  • 请求处理:页面控制器(显然您有一个控制身份验证和授权的条目类)

  • 演示文稿:监督演示者(如果我说得对,你在服务器中执行主逻辑,但是然后你将一些UI / JSON-Content替换任务委托给前端的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框架的原因:

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

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