【问题标题】:Loss of knowledge using HMVC (Kohana)使用 HMVC (Kohana) 丢失知识
【发布时间】:2012-02-20 09:25:33
【问题描述】:

我对 Kohana 的 HMVC 模型有疑问。我真的很喜欢在相同的原则 (MVC) 中将东西分离为组件的想法,以便扩展和更轻松地创建 api。

虽然我遇到了一些缺点,比如知识的丧失。

例如,我可以有名为 newscategories 的组件。最重要的是站点控制器,它们只是委托完整的请求并通过这些组件收集站点模板的所有 html/数据。

          Site controller
           /             \
          /               \
   categories              news

当我想要边栏的所有类别时,我可以调用:/categories/list。当我想要一个新闻项目时,我可以调用 /news/ID。两者都返回 html。

如果我有一个主要任务是显示新闻文章的新闻阅读站点控制器,该控制器将获取侧边栏的所有类别。接下来它将获取新闻项目。

                Newsreadon
               /          \
              /            \
 categories/list (html)    news/<id>   (html)

当我在站点模板中显示所有元素时,我想知道 html 标题标签的新闻的“标题”,但我不知道,因为我返回 html。

我觉得有多种解决方案:

  1. 在某些注册表中存储标题(但如果我将组件扩展到其他服务器并使用 HTTP,则会丢失)。所以考虑到缩放,没有好的选择。
  2. 返回带有 'title' 和 'html' 字段的 json。
  3. 读出 html 的某些部分,例如标题的 h2

解决方案 2 似乎是最不讨厌的,并且可以保持无状态通信的完整性。

我真的很想知道将如何以优雅的方式解决这个问题?我错过了“解决方案”吗?

编辑: 有趣的阅​​读以了解 kohana 的 HMVC: http://techportal.inviqa.com/2010/02/22/scaling-web-applications-with-hmvc/

【问题讨论】:

    标签: php kohana hmvc


    【解决方案1】:

    如果我有一个新闻阅读网站控制器,主要任务是显示一个 新闻文章...

    如果此控制器的目的是显示新闻文章,那么我不明白需要额外的控制器。考虑更改您的应用程序设计,也许 Newsreadon 扩展了控制器以显示新闻文章。

    【讨论】:

    • Newsreadon 只是用不同的小部件元素构建网站。我不能让 newsreadon 扩展新闻,因为新闻是作为可以轻松扩展到其他服务器的内部请求构建的。它应该由 hmvc 设计分开,否则我无法利用依赖 HTTP 协议进行内部和外部使用的 hmvc 优势。
    • 我理解这些概念,我没有正确理解您的情况。如果您想要结构化数据,而不仅仅是一段 html,那么请考虑使用数据交换格式,例如 JSON。
    • 担心这将是唯一的解决方案。我想我可以将它构建为“标题”和“html”。如果我只返回 json 数据(没有 html 标记),我的网站需要创建 html,而这也完全适合组件
    【解决方案2】:

    既然你使用news/&lt;id&gt;显示新闻,想必父控制器知道新闻的ID。从那里,只需从您的模型中获取新闻标题。那将是正确的方法。尝试从子请求中提取一些数据将使您的应用程序更紧密地耦合,并且从长远来看更难以维护。

    【讨论】:

    • 但我将新闻视为“小工具”。如果我让 newsreadon 控制器访问模型,那么我有 2 个控制器可以访问模型,如果没有适当的缓存,最坏的情况是数据库。这听起来对我来说是额外的耦合。
    • @mauserrifle,我不会担心应用程序访问同一个模型两次,因为它可以很容易地优化(正如你所说,它可以被缓存)。然而,请求或控制器之间的双向依赖不能以明显的方式进行优化。基本上,您有两个控制器需要访问相同的数据——它们应该直接通过模型访问这些数据,而不是假设另一个控制器正在做什么。
    • 我理解你的观点,让我犹豫了。但我确实担心,因为如果一个小部件/组件被扩展到其他服务器,我宁愿不希望站点控制器直接与这个模型做任何事情。所以只需从组件中获取数据,显示它,最终可能会将 POST 请求传递给组件。这种方式是分开的,网站只是组件的客户端。我们计划在未来做一个移动应用程序,通过这种分离方式,组件可以完成所有业务,网站和移动应用程序只是使用同一个网关的客户端。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    相关资源
    最近更新 更多