一尘不染

如何在我的PHP / SQL / HTML / CSS代码上实现MVC样式?

sql

我一直在开发用于可视化某些数据的程序。我的程序从MySQL数据库获取特定输入,并绘制一些图形(libchart库),创建一些表等。

我的问题是,现在它在那里是一个代码地狱。我大约有7个php文件(索引,图形页面,画廊等),它们全部都带有HTML / CSS和PHP /
SQL代码(其中一些只是具有php扩展名,但内部只有HTML)。我暂时没有阅读和理解该项目的问题,但是我想如果有人尝试过,他可能会头疼。另外,像这样的连续编程是不切实际的,因为将来该项目可能不容易扩展。

您对如何成功将HTML / CSS与PHP /
SQL分开有任何建议吗?我不想使用框架,因为我没有做任何需要用户输入,会话处理等的工作。我只是运行一些查询并使结果可视化。我在这里主要谈论的是架构,如果适用的话,也许是一个可以帮助我的脚本(我已经读过Smarty,但不确定是否正是我所需要的)。


阅读 140

收藏
2021-03-17

共1个答案

一尘不染

您对如何成功将HTML / CSS与PHP / SQL分开有任何建议吗?

恭喜您了解如何改善代码。这是前提,您需要进行改进,而且话题很长。因此,您的意志至关重要。

我从轻开始,然后尝试给出一些提示。当您缺少经验时,请寻找一个起点,最有可能的是下面列出的最后一个。但首先要注意的是:

为了使某些东西彼此分离,您需要具有一些分离的代码:

[HTML/CSS/PHP/SQL]

[HTML/CSS] <--> [SEPARATOR] <--> [PHP/SQL]

这里的 分隔符 实际上也是PHP代码,但是我想您明白了。

如您所见,只有 SeparatorHTML / CSSPHP / SQL 对话。

因此, HTML / CSSPHP / SQL都 需要与 Separator (两者之间的界线)建立接口才能使此工作有效。

通常,在程序中,您会传递处理过的数据。数据是非常动态的,并且可能具有复杂的复杂性,尤其是如果您将数据传递给应该正确格式化的输出例程。

如何编写这样的 分隔符 (或多个 分隔符) 有多种方式。您可以对软件进行 分层, 也可以提供可以在其 领域领域 中发挥作用的
组件 。例如,您有一个 数据库层数据库组件 ,负责与数据库的交互。

或者,您有一个 模板引擎 ,负责将您的字符串和数组放入一些可读的HTML中。

简而言之,这是软件设计的面食理论:

  • 意大利面条代码 - 代码 合而为一,交织在一起,最好与Bolognese或Aglio,Olio e Peperoncino结合使用。
  • 千层面代码 -分层,一层与其他两层交互(除非底部或顶部),并且始终与B焦糖酱一起使用。
  • Tortelini代码 -可以完成工作的小型组件,内部装有肉类或辛辣蔬菜。

就像我们在生活中吃不同的面食一样,在编程时,我们也需要处理所有这些不同类型的代码,并且随着时间的流逝,我们会发展出自己喜欢的口味。小时候我们很饱,但是随着时间的流逝,我们开始自己做饭并改变食谱。

因此,我认为您不希望在接下来的几周内吃掉 很多很棒的MVC Framework X
只是一个好点,因为有人告诉您这是现在就吃的方式。在吃东西之前先品尝一下,对不对?更不用说快餐了,您知道像这些带包装的酱汁的面条-只加水。嗯

我不知道您的输出需要什么数据,什么是输入。以下是一些输出HTML /
CSS并与MySQL数据库交互的应用程序的重构技巧。这不是一个完整的列表,说明只能大致概述一些想法:

  • 将CSS从HTML中移出 。在链接的CSS定义中有效使用选择器,style如果还有属性,请替换任何属性。这使您的CSS代码可重复使用,并且更具模块化。这将帮助您发现HTML内的缺陷,并将结构(HTML)与演示(CSS)分开。有效的HTML始于CSS的有效使用,这两者非常强大,而且通常已经可以减轻程序输出例程的负担。
  • 将业务逻辑从HTML中移出 。HTML和您的代码都可以成为野兽,因此最好将它们分开。他们倾向于相互竞争,并且两者都很强大,因此在您开发应用程序时斗争会一直持续下去,这会使您分心于需要做的工作。
    考虑一下您是否需要在应用程序中具有复杂的输出,或者是否可以仅传递带有子元素的数组(键是var,var可以包含字符串或数字或另一个var-
    array)。通常,只需要将复杂的数据传递到 视图模板即可
    。然后,您的HTML仅需要回显一些数组成员,或者foreach在子数组上。这是创建模板的非常简单的技术。您可以使用PHP,因此实际上非常灵活(只需画出属于您的视图层的代码以及属于应用程序一部分的边界即可,例如为视图提供值)。

  • 将SQL移出代码 。移走数据库交互代码。创建您自己的一个或多个对象,这些对象具有一些方法,这些方法可以在实际处理代码中以您需要的方式(消耗)$component->getThatData()返回数据,例如,然后以规范化的形式返回数据。然后使这些组件使用专用的 数据库组件数据库 进行对话。在您的应用程序代码(业务逻辑)中,仅使用数据库组件,最好使用您创建的对象来获取数据,因此您在主代码内不再有任何SQL行。

  • 划分并征服 您的应用程序代码:将您的代码划分为 事务脚本 。它们通常很容易从现有的意大利面条代码创建,并且很可能会成为您正在寻找的中间所说的 分隔符 。然后,他们将负责处理数据并将其传递(进入输出/视图)。
  • 使用清晰的语言 :如果您有复杂的格式化字符串数据未规范化,请编写自己的 Parser 类来为您工作,并且可以轻松地重用(如果在应用程序中是这种情况)。当您期望最大程度地减少在代码中使用纯SQL时,您也应该期待将复杂的正则表达式也移开。 封装变化 是关键。同样的道理也适用于长例程,以仅处理某些数据(例如,以另一种格式对数据进行排序,排序和排列),将其移至各自的组件中,并考虑如何使它们可访问和可重复使用。
  • 使代码正常运行 :了解如何在程序中调用功能的逻辑。您可以尝试将功能与调用方式分开。例如,一些调用任何 事务脚本的 例程。如果您直接通过浏览器请求PHP文件,则可能没有必要,因为那样的话您的事务脚本和网络服务器会小心地将通过URL发送到您的应用程序中的命令解析为事务脚本。但是,然后您应该将处理 传入命令及其参数 所需的任何逻辑包装到可重用的组件中(例如,包含用于从HTTP请求获取URL和/或变量的标准代码的 Request 类)。
  • __通过在通过浏览器调用的所有文件的最顶部包含相同文件, 创建一个公共入口点 。然后,您可以将通用代码(例如,设置 应用程序会话状态 对象和初始化数据库组件)放入其中,另请参见 应用程序控制器
  • __通过查找字面重复的代码来 删除重复 项。将其包装到一个函数或类中。为您自己的应用程序创建一个库文件夹,您将其包括在内。如果您遵循带有“类名”和“名称间隔”的通用模式,则可以轻松地使用自动加载器使包含变得容易。使 您的库 与第三方代码分开。将所有第三方代码放入其自己的库文件夹中,每个第三方组件都有一个子目录。
  • 使用轻便的现有组件。 轻量级很重要,因为您已经拥有了自己的代码,您不想立即将其全部按下并压入框架。现有状态很重要,因为您不想重新发明轮子。您将有足够的工作来自己重构代码。在对您的应用程序感觉更好并且仍然有能力和意志之后,就可以随时编写所有新内容。但是,无论您是一个人还是一个小团队, Existing 都非常强大。简单的库例如:
  • 创建应用程序状态 ,例如,在某些组件无需直接交互而需要了解应用程序状态或彼此有关的情况下,可以将其用作对象。在PHP中,默认情况下,如果您没有一个,则使用全局和全局静态变量来创建状态。但是,随着代码的增长,这些变量会使您的工作变得更加艰难。创建应用程序状态对象时,很清楚哪些组件可以使用它,可以控制对它的访问(例如,调用方法而不是读取变量,这可以帮助调试),并且组件也可以找出是否是在应用程序流程中正确的时间开始起作用。这也是随时间重构代码的好工具。
  • 保留一个 可运行的 应用程序 ,使您的代码处于运行状态。理想情况下,这将通过自动测试进行备份。考虑到您需要大量重写。例如,如果您开始集成数据库组件,请执行此操作。一步将所有现有代码移至其中。那么谁告诉你它仍然运行?使用git可以更好地撤消和测试内容。这比选择正确的库更重要。保留有效的应用程序始终也是关键点,因为这就是为什么要更改它,对吧?
2021-03-17