【问题标题】:How to interact between the business logic and a template?如何在业务逻辑和模板之间进行交互?
【发布时间】:2012-04-09 05:49:31
【问题描述】:

我有下一个问题。

我有一个页面:

  1. 它从数据库中读取会话并从数据库中读取所有内容。
  2. “应用”逻辑。
  3. 最后是作为模板文件 (.tpl) 的演示文稿

而且它有效。模板文件是一个带有网格和表单的网络,我可以在其中对数据库进行 CRUDL,因此它可以根据访问它的用户而有所不同。例如,如果当前用户是管理员,那么应该显示所有选项,如果是受限用户,那么应该隐藏一些字段

但是,我不知道下一步该怎么做。在业务逻辑和模板之间进行交互的更好方式是什么?

a) 使用带有逻辑的模板(Presentation Logic)。例如,如果用户(正在访问它)的权限有限,则逻辑删除按钮“保存”:

 ...
 {if current_user!=limited}
  <input type='button' value='save' />
  ..
 {endif}
 ...
  • 优点是它只使用一个模板。
  • 缺点是它向表示层添加了逻辑。

b) 使用不同的模板文件并在业务逻辑中决定加载哪个模板。

 if ($current_user!="limited") {
    load_template("template_complete.tpl");
 } else {
    load_template("template_limited.tpl");
 }
  • 专业人士是模板更清晰(无逻辑)
  • 缺点是冗长,需要不同的模板。

还是存在其他解决方案?

【问题讨论】:

  • 给希望编辑标签的人的说明。整个话题是关于presentation logic。它是business logic 标签,可以安全地删除,但不是演示文稿之一。谢谢。
  • 你能找到一些可以用它标记的其他问题吗?也不清楚它与模板化或 MVC 所暗示的关注点分离有何不同。

标签: php model-view-controller templates business-logic


【解决方案1】:

我建议您不要只看这个例子,而是想一想您想要实现的目标是什么,创建一个规则,然后按照规则工作。

例如在上面的示例中,您是否试图阻止向用户提供某些信息?或者你是说一个用户有一个特定的角色,系统应该有一定的控制来对特定的角色做出反应。

这也是现在开发工作与以后维护工作的回报。也许试着想想在一个完美的世界里你会做什么,然后倒退。也许你可以构建一个构造函数来创建你需要的各种模板等等。

我认为没有对错,只有选择和不同的回报

【讨论】:

    【解决方案2】:

    在视图中实现表示逻辑是完全可以的。事实上,这是做它的正确位置,出于同样的原因,它也被称为“表示层”。当您需要在视图中实现一些表示逻辑时,您总会达到这一点,例如,当需要迭代数组以将其显示为表格时,或者当输入验证失败时在输入字段下方放置错误消息时。

    正如迈克尔·拉什顿 (Michael Rushton) 已经说过的:当可以避免重复代码时,你不想重复代码。

    模型-视图-控制器模式是将逻辑分为三层:

    • 数据表示逻辑(模型)
    • 业务逻辑(控制器)
    • 表示逻辑(视图)

    不是所有逻辑从表示移到控制器。

    【讨论】:

      【解决方案3】:

      哦。答案很简单。
      只是尝试支持这些不同的模板很长一段时间,努力重复所有的更正。

      你会知道答案的。

      这是编程,伙计。
      编程代表避免重复

      提示:无论如何,你不能让你的第二种方法“无逻辑”。
      总有一个逻辑。它被称为“演示逻辑”是有原因的。

      【讨论】:

      • 那些“逻辑层”的概念更全面,更真实。就此而言,表示层是设计人员工作的地方,而设计人员对服务器端编程一无所知。但是,它也意味着客户端脚本
      • @magallanes 在现实设计师中从不使用模板。他的工作是 HTML,程序员的工作是让它动态化,充满逻辑。
      • 好吧,看谁拿着鞭子。我与知道 php 和 jsp 标签的设计师一起工作,而其他人只在 Photoshop 中工作(并给了我一个 psd)。
      • @magallanes 这是两种设计师。图形设计师应该对 HTML 的东西一无所知。他的工作是想象力,他制作图片。虽然 HTML 设计师是 CSS(通常是 JS)专业人士。让它们都使用模板是非常低效的方法。虽然让 PHP 程序员负责模板是正确的事情。这只是来自我所知道的公司的经验。当然,这种设置可能会有例外,如果遵循它,它是最有效的:HTML 设计师制作 HTML,PHP 程序员从中制作模板,HTMLer 可以从现在开始再次使用它
      【解决方案4】:

      如果模板完全不同,那么我会说第二个示例。但是,如果受限用户和非受限用户之间的区别是几个按钮、链接、&lt;div&gt;s 等出现在一个而不是另一个,那么我说是第一个。您不希望过多地重复代码,因为这会使更新或修复错误变得更加麻烦。

      尽管您想尽可能多地将逻辑与表示分开,但您可能会走得太远。在某些时候总会有一些重叠。如果它不太复杂,那么在条件语句中包含 &lt;input&gt; 并没有什么问题。

      无论如何,PHP 都是为了与 HTML 一起使用而构建的。

      【讨论】:

        猜你喜欢
        • 2021-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-09
        • 1970-01-01
        • 2011-02-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多