您对如何成功地将 HTML/CSS 与 PHP/SQL 分离有什么建议吗?
恭喜您了解如何改进代码。这是前提,你需要想要改进它,而且这个话题很长。所以你的意志至关重要。
我开始时会比较轻松,然后尝试给出一些提示。当您缺少经验时,请寻找一个起点,最肯定的是下面列表中的最后一个。但首先要做的事情是:
要将某些内容彼此分开,您需要一些代码来区分:
[HTML/CSS/PHP/SQL]
[HTML/CSS] <--> [SEPARATOR] <--> [PHP/SQL]
The 分隔器这里实际上也是 PHP 代码,但我想你已经明白了。
正如你所看到的,只有分隔器与交谈HTML/CSS and PHP/SQL.
So both HTML/CSS and PHP/SQL需要有一个接口分隔器(之间的线)使这项工作有效。
通常在程序中,您传递已处理的数据。数据非常动态,并且可能具有复合复杂性,尤其是当您将数据传递到应正确格式化数据的输出例程时。
有多种方法可以实现这样的分隔器(或其中的多个)可以被写入。你可以layer您的软件或提供成分做他们的事情area or domain。例如。你有一个数据库层 or 数据库组件它负责与数据库的交互。
或者你有一个模板引擎它会小心地将字符串和数组放入一些可读的 HTML 中。
简而言之,这就是软件设计的面食理论:
-
意大利面条代码- 全部合而为一,代码紧密交织,最好使用 Bolognese 或 Aglio、Olio e Peperoncino。
-
千层面代码- 分层,一层与另外两层相互作用(除非底部或顶部),始终与白酱。
-
饺子代码- 只完成其工作的小组件,里面有肉或辣蔬菜。
就像我们在生活中吃不同的面食一样,在编程时我们也需要处理所有这些不同类型的代码,并且随着时间的推移我们会形成自己喜欢的口味。当我们还是个孩子的时候,我们会吃饭,但随着时间的推移,我们开始自己做饭并改变食谱。
所以我认为这是一个很好的观点,你只是现在不想吃东西MVC Framework X 有很多很棒的东西接下来的几周只是因为有人告诉你这是现在的饮食方式。吃东西之前,还有品尝,对吗?更不用说快餐了,你知道像这些带酱的面条——只加水。呃。
我不知道你的输出需要哪些数据以及输入是什么。以下是针对输出 HTML/CSS 并与 MySQL 数据库交互的应用程序的一些粗略重构技巧。这不可能是完整的列表,描述只能粗略地概述一些想法:
-
将 CSS 从 HTML 中移出。在链接的 CSS 定义中有效使用选择器并替换任何
style
如果你还有一些属性的话。这使得您的 CSS 代码可重用并且更加模块化。它将帮助您找到 HTML 内部的缺陷,并将结构 (HTML) 与表示 (CSS) 分开。有效的 HTML 始于有效使用 CSS,这两者非常强大,通常这已经可以减轻您的程序输出例程。
-
将业务逻辑移出 HTML。 HTML 和您的代码都可能是庞然大物,因此最好将它们分开。他们倾向于互相争斗,并且由于两者都非常强大,因此在您开发应用程序时,争斗将会继续,这会分散您对需要完成的工作的注意力。
考虑一下您的应用程序中是否需要已经有复杂的输出,或者您是否可以只传递带有子元素的数组(键是 var,var 可以包含字符串或数字或另一个 var 数组)。通常这足以将复杂的数据传递到view or template。然后,您的 HTML 只需要回显一些数组成员和/或foreach
在子数组上。这是创建模板的非常简单的技术。您可以使用 PHP,因此实际上非常灵活(只需绘制属于您的视图层的代码以及属于应用程序的一部分的边框,例如为视图提供值)。
-
将 SQL 从代码中移出。将数据库交互代码移开。创建一个或多个对象,这些对象具有在实际处理代码中以您需要(使用)数据的方式返回数据的方法,例如
$component->getThatData()
然后以标准化形式返回数据。制作这些组件然后使用专用的数据库组件与数据库交谈。在您的应用程序代码(业务逻辑)中,仅使用数据库组件,最好使用您创建的对象来获取数据,因此您的主代码中不再有任何 SQL 行。
-
分而治之您的应用程序代码:将您的代码分为交易脚本。它们通常很容易从现有的意大利面条代码中创建,并且可能会成为所说的分隔器您正在寻找中间术语。然后,他们将负责处理数据并将其传递(到输出/视图中)。
-
使用清晰的语言:如果您有未标准化的复杂格式字符串数据,请自行编写Parser为您完成工作并且可以轻松重用的类(如果您的应用程序是这种情况)。正如您应该期望最大限度地减少代码中纯 SQL 的使用一样,您也应该期望将复杂的正则表达式移走。封装不同的内容是一个关键点。这同样适用于处理一些数据的长例程(例如,以另一种格式排序、排序和排列),将它们移动到各自的组件中,并考虑如何使它们可访问和可重用。
-
让你的代码正常运行:了解如何在程序中调用功能的逻辑。您可以尝试将功能与其调用方式分开。例如。调用任何一个的一些例程交易脚本。如果您直接通过浏览器请求 PHP 文件,则这可能不是必需的,因为这些文件就是您的事务脚本,并且 Web 服务器会负责将通过 URL 发送到应用程序的命令解析为事务脚本。但是您应该包装处理所需的任何逻辑传入的命令及其参数转化为可重复使用的组件(例如Request类,包含从 HTTP 请求获取 URL 和/或变量的标准代码)。
-
创建公共入口点通过在通过浏览器调用的所有文件的最顶部包含相同的文件。然后您可以放置通用代码(例如设置应用程序会话状态对象并初始化数据库组件)进入其中,另请参阅应用控制器
-
删除重复项通过寻找字面上重复的代码。将其包装到函数或类中。为您自己的应用程序创建一个库文件夹,将包含内容放入其中。如果您遵循类名和命名空间的常见模式,则可以轻松使用自动加载器来轻松包含。制作你的图书馆除了第三方代码。将所有第三方代码放入其自己的库文件夹中,每个第三方组件都有一个子目录。
-
Use lightweight, existing components. Lightweight is important because you have your own code already, you don't want to turn and press it all at once onto a framework.
Existing is important because you don't want to re-invent the wheel. You will have enough work for your own refactoring your code. After you feel better about your application and you still have power and will, you can always write everything new. But if you're alone or in a small team, Existing is pretty powerful.
Simple libraries are for example:
- 模板引擎:Mustache
- 数据库层:NotORM
-
创建应用程序状态,例如作为一个对象,您可以在某些组件需要了解应用程序状态或彼此之间无需直接交互的情况下使用。默认情况下,如果 PHP 中没有全局变量和全局静态变量,则用于创建状态。然而,随着代码的增长,这些变量可能会让你的生活变得困难。当您创建应用程序状态对象时,很清楚哪些组件使用它,可以控制对它的访问(例如,调用方法而不是读取变量,这可以帮助调试)并且组件也可以找出它是否是在申请流程中的正确时机采取行动。它也是随着时间的推移重构代码的好工具。
-
保留工作应用程序,让你的代码处于运行状态。理想情况下,这将得到自动测试的支持。考虑一下您需要重写很多内容。例如,如果您开始集成数据库组件,那就去做吧。一步将所有现有代码移至其中。那么谁告诉你它仍然在运行?使用 git 可以更好地撤消和测试内容。这比选择正确的库更重要。保留工作应用程序也始终是关键点,因为这就是您更改它的原因,对吧?