使用MVC设计模式,存储模型与之通信的JSON数据的位置?

时间:2017-03-26 17:43:45

标签: php json model-view-controller model

编辑:显然现在删除这个问题为时已晚,这是一个耻辱,因为我不知道为什么在去年五月将页面存储在JSON文件中似乎是一个合理的想法。

让框架处理页面路由而不是重新发明轮子是件好事,但我试图更好地理解这种设计模式的实际实现。我也认识到a pure implementation of MVC may not always be possible for web applications,但所有这些都是服务器端的。

这是我目前的结构(减去不相关的文件):

app/
    controllers/
        PageController.php

    models/
        PageModel.php

    views/
        GlobalFooter.php
        GlobalHeader.php

    Pages.json

config/
    db_connect.php

/docs
/lib
/web
    /js
    /img
    /css
    index.php

当用户加载页面时,页面会实例化一个控制器,该控制器将$ _GET参数传递给页面模型。

模型将Pages.JSON文件作为关联数组加载并检索特定页面数据:

title
controller
page-specific stylesheet names
page-specific script names
which membergroups can access it
etc.

同时提取允许该用户访问的页面的动态列表,以进行导航。然后,控制器使用适当的内容调用适当的视图。

到目前为止:最初我打算将Pages.json放入“views”,因为它是静态数据,样式表/脚本规范与前端管理相关。毕竟,目标是重新粉刷房子只需要webroot访问,或者查看模板访问以进行更广泛的重建。

但是Pages.json不是一个视图。这是一个数据源。

当前“解决方案”: 将文件保留在app / ...的顶层,但我觉得这是一个MVC的失礼。

即使不是,我也不希望我的app文件夹成为数据源的转储基地。

我一直在折腾的潜在解决方案:

  1. 将页面存储在数据库表而不是JSON中,并使用PageModel方法从 db_connect.php 调用方法来获取它。但我希望页面能够加载自己的骨架,即使与数据库的连接失败也是如此。此外,即使有缓存,我也不希望在页面加载时发出该数据库请求。

  2. 将页面存储在多维PHP数组而不是JSON中...但是我有相同的设计问题,虽然有一个PHP文件,但是我想要在这个前端工作的东西甚至比JSON。随着少量的开销。

  3. app / 中添加 data / 作为数据容纳目录...但这也感觉太像是走出设计模式并创建了一个倾倒地。

  4. 回到PageModel中分离并行的一维PHP数组,这在理论上可能更有效,但与动态获取页面信息相比,它是丑陋的,冒险的和硬编码的。罗。

  5. 当前计划的解决方案:

    1. 将前端JSON数据(样式表等)从中解耦 后端(控制器等)分成两个JSON文件。
    2. 从现在开始在视图中存储前端数据源。
    3. 从现在开始在模型中存储后端版本。
    4. 这听起来像是一个很好的解决方案吗?或者是否存在应该存储数据源的约定?

      这是一个Y问题的X问题,我不应该将这些页面存储为JSON数据?如果是这样,对于数据库表或硬编码的PHP数组,什么是更好的替代方案?

      如果有人有建议或答案,请提前感谢您的时间。

1 个答案:

答案 0 :(得分:0)

您可以避免将这些值存储在json文件中。

  1. 你可以引入一个命名约定,这可能不太好 一些用例的解决方案。
  2. 我会在模板文件(HTML或PHP)文件中绑定CSS和JSS 你的看法。这样您就不必列出所有资产文件 手动在json文件中。因此,您的设计师/前端程序员可以 只需编写一个“普通”的HTML /模板/ PHP文件。
  3. 拥有一个加载页面定义的模型,如果您的页面中有2个或模型,则可能会出现问题。此外,您的模型将无法重复使用,因为它与页面相关联。

  4. 对于您的页面定义,例如标题,元关键字和内容,您可以专门为此创建1个模型。然后,您的控制器通过调用指定的操作/页面来获取这些数据。例如在索引操作中,您可以调用:pageDefModel-> getMetaTags();.然后您可以将这些结果传递给您的视图。