【问题标题】:PHP: Separating Business logic and Presentational logic, is it worth it? [duplicate]PHP:分离业务逻辑和表示逻辑,值得吗? [复制]
【发布时间】:2009-07-06 19:16:09
【问题描述】:

可能重复:
Why should I use templating system in PHP?

我只是好奇有多少开发人员实际上这样做了?

到目前为止,我还没有,我只是好奇它是否真的有助于让事情看起来更干净、更容易理解。我听说过使用 Smarty 之类的模板引擎提供帮助,但我也听说过相反的情况。他们只会产生不必要的开销,本质上就像学习一门新语言。

这里有人有使用模板的经验吗?你对他们有什么感觉?对大项目有帮助还是只是浪费时间?

附带说明:我工作的公司没有设计师,只有两名开发人员负责这个项目的重新设计/升级。我也用了一点AJAX,这会不会和模板引擎有问题?

【问题讨论】:

标签: php html templates


【解决方案1】:

这种做法不仅使代码看起来更干净,而且还具有许多长期和短期的好处。

组织代码永远不会出错。首先,如果其他人必须在您之后接听,它会使维护和阅读变得更加容易。我以前和 Smarty 合作过,很好,它可以防止设计师的工作干扰程序代码。

使用模板系统和框架可以更轻松地完成任务。您可以遵循一条经验法则,即 DRY(不要重复自己)。框架可帮助您实现这一目标。

您可能想查看MVC,这是这些框架所基于的模型。但是您可以在不必使用框架的情况下实现这种设计结构。避免学习曲线。对于像Zend 这样的框架,学习曲线比其他框架要大得多。

我发现Code Igniter 相当容易使用,他们的网站上有一些非常有用的视频教程。

祝你好运!!

【讨论】:

    【解决方案2】:

    其实是业务逻辑需要从视图中分离出来。您可以在视图中使用 php 作为“模板语言”。

    你可以在我认为的任何模板引擎上使用 ajax。

    编辑

    我最初的回答解决了是否使用模板引擎来生成您的 html 的问题。

    我认为 php 足以胜任模板任务,只要您将业务逻辑与表示逻辑分开。

    即使对于简单的页面也值得这样做,因为它使您能够:

    • 将应用程序的 brain 代码与 face 的代码隔离开来,这样您就可以更改面部,而不会弄乱大脑,或者您可以在不影响外观的情况下增强大脑
    • 在 20% 的代码中隔离 80% 的错误
    • 创建可重用的组件:您可以将不同的表示代码分配给相同的业务代码,反之亦然;
    • 将功能请求(业务代码)的关注点与设计请求(表示代码)的关注点分开,这通常也与客户端的不同人员和承包商端的不同人员有关
    • 使用不同的人编写业务代码和演示代码;您可以让设计人员直接处理演示代码,只需最少的 php 知识;

    一个模仿 MVC 并且不使用对象的简单解决方案可能是:

    • 使用单个控制器 php 文件,该文件通过 .httpdaccess 文件接收所有请求;
    • 控制器根据请求决定使用什么业务和演示代码
    • 控制器然后使用包含语句来包含业务 php 文件
    • 业务代码很神奇,然后包含演示文稿 php 文件

    【讨论】:

    • 或多或少是我要说的。我认为 PHP 最初被开发为一种模板语言,因此实际上不需要添加另一层,但 do 将任何非呈现代码分开。
    【解决方案3】:

    PHP 一个模板引擎(或者如果你喜欢,一个超文本预处理器)。当 HTML 与 PHP 逻辑大量混合时,它确实变得非常难以维护,这就是为什么您需要单独定义函数来构建各个部分,并简单地从嵌入在 HTML 中的短函数调用构建页面。这样做,除了分隔符的选择之外,我看不出 Smarty 和原始 PHP 之间有什么区别。

    【讨论】:

      【解决方案4】:

      关注点分离对于任何类型的软件开发来说都是非常重要的租户,即使是在网络上也是如此。太多次我发现人们只是将所有内容都放入尽可能少的文件中,然后就结束了。这肯定是错误的做法。如前所述,它将有助于其他人代码的可维护性,但更重要的是,它有助于您能够阅读代码。当一切都分离出来时,你可以轻松思考。

      我发现,Code Ignitor 是使用 PHP 最容易学习的框架。我几乎开始了我现在的工作,并在几天内开始使用它,从从未听说过它,到非常有效地使用它。我也不认为它是另一种语言。基本上,使用该框架迫使我以一种可管理的方式组织事物,并且添加的功能与使用插件等 jQuery 或在 Java 中导入包很相似。认为这就像学习另一种语言几乎是愚蠢的。

      所以,简而言之,组织组织组织。但是请记住,有一个抽象级别变得荒谬。一个经验法则是一个类(或在我们的例子中是文件)应该很好地完成一件事。这并不意味着它是一个包装 print 的类,而是接受一个字符串,使用复杂的算法对其进行格式化,然后打印它(这只是一个示例)。每个类都应该做一些特定的事情,你可以在没有任何框架的情况下做到这一点。然而,MVC 的伟大之处在于它可以让你进一步组织事物,不仅仅是在单个类级别,而是在“包”级别,即模型、视图和控制器(至少在这些框架的情况下;还有其他打包项目的方法)。所以,现在你有一个做的很好的类,然后你把它们和做其他事情的相似的类分组在一起。这样,一切都保持非常干净和易于管理。

      一旦将事物组织成类,然后是包,最后要考虑的层面是如何在包之间访问这些类。使用 MVC 时,访问通常会转到 ModelControllerView,从而将模型(通常是数据库内容和 PHP 世界中的“业务”代码)与视图(通常从用户,并将其传递给控制器​​,控制器将从模型中获取更多信息,如有必要,或对输入信息执行其他操作)。控制器的工作方式类似于其他两个软件包之间的交换机通常。同样,还有其他方法可以使用包装等,但这是一种常见的方法。

      希望对你有帮助。

      【讨论】:

        【解决方案5】:

        Smarty 和其他 php 模板框架实际上只不过是编译为 PHP,而且它们还在大多数情况下缓存其结果以加快处理速度。您可以自己完成这一切,但如果您查看 Smarty 生成的已编译模板,并与您创建的原始 Smarty 模板进行比较,您会发现一个比另一个更具可读性。

        【讨论】:

          【解决方案6】:

          这些天我主要编写 mod_perl,并在我们正在进行的项目的中途开始使用模板 (HTML::Template)。如果我必须再次做出决定,我会从一开始就使用模板 - 稍后重写以使用模板有点乏味,尽管因为你得到更好和更清晰的代码而得到回报。对于 php 中大于 2-3 页的任何内容,我也会使用一些模板引擎。

          【讨论】:

            【解决方案7】:

            像 Smarty 这样的模板引擎的一大优势是,非开发人员可以使用它来嵌入在前端使用的必要逻辑(除了最简单的网站之外,真的无法分离逻辑并显示在所有网站上) )。但是,如果开发人员是维护页面的人,那么我认为使用 PHP 会更好。

            如果您分离出大型逻辑块并为循环和 for-each 流控制语句保持一致的模式(即不使用打印语句,或仅对单行使用打印语句等),那么应该是好的。

            【讨论】:

              猜你喜欢
              • 2011-03-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-09-04
              • 2011-07-03
              • 1970-01-01
              • 2013-12-15
              • 1970-01-01
              相关资源
              最近更新 更多