php - 没有紧凑结构的 MVC 应用程序的原因是什么?

标签 php model-view-controller web-applications architecture directory-structure

在一个 web MVC 项目中,我有以下结构:

mymvc/                      -> Project root.
    public/                 -> Document root. The only one folder accessible from web.
        assets              -> Client-side assets. NOT ONLY for global themes and libraries, BUT ALSO for each specific "view" controlled by the "src/Application" components.
            css/
            js/
            images/
            ...
        index.php           -> Application's entry point.
    src/                    -> UI layer rules.
        Application/
            Controller/
            View/
            ViewModel/
        Dispatcher/         -> Application dispatching - route matching, dispatching to the specified controller, etc.
        ...                 -> Other classes used by the components in the "src/Application" folder.
    templates/              -> Layout and template files.

注意:所有领域模型组件(实体、存储库、数据映射器、服务等)都位于 mymvc 目录之外的文件夹中,因此它们也可以被任何其他应用程序访问。

我想过——实际上想了很多——关于执行以下两个步骤:

  1. templates 目录移动到 src/Application 文件夹。
  2. assets 目录移动到 src/Application,在 Web 服务器 (Apache) 配置中创建别名 /assets/ -指向移动的文件夹,并允许外部世界对其进行完全访问。

全局使用的 Assets ——如 css 主题、js 库代码、背景图像等——仍然可以保留在 public 目录中——显然不在名为或别名的文件夹中 Assets

我真的觉得这两个步骤是个好主意,因为在我看来,这两个文件夹都包含与 src/Application 中的结构相关的资源。 所以,不要有这样的东西:

  • src/Application/Controller/AboutUs.php
  • public/assets/js/AboutUs.js
  • templates/AboutUs/[multiple-layout-and-template-files],

像下面这样的结构似乎要好得多:

  • src/Application/Controller/AboutUs.php
  • src/Application/assets/js/AboutUs.js
  • src/Application/templates/AboutUs/[multiple-layout-and-template-files],

但是,在研究了很多 Web 框架之后,我意识到它们都将两个文件夹(templatesassets)与应用程序文件夹完全分开。

所以我想问一下:有没有什么具体的原因,为什么我提出的两个目录的移动不能,或者不应该做?

谢谢。

最佳答案

这完全取决于您想要实现的目标以及您的工作流程。您似乎在使用 PHP - 值得关注非 PHP 框架,例如 Ruby on Rails。

通常,您希望输出文件夹为“只读”- 开发人员不应手动编辑文件,而是构建和部署管道运行 Gradle 等工具来转换 SASS/LESS 和 JS 文件(来自 /source 文件夹)放入 CSS 和缩小/连接的 Javascript,并将它们放在 /public 中的正确位置。构建和部署管道通常针对开发构建和生产构建具有不同的配置(例如,仅针对生产进行缩小)。

在 Ruby on Rails 中,结构大部分都像您描述的那样“好得多”——除了"template"是位于“ View ”下的一个名为“布局”的文件夹。有一个构建步骤(自动运行)可以转换各种 Assets 文件(SASS/LESS、JS 等)。

可以看到Ruby on Rails目录结构的详细说明here . Django的目录结构详解here .

回答您评论中的问题:

  • SASS/LESS/JS/Coffee 脚本文件应该放在哪里? - 由您决定。在 Rails 中,它们位于 /app/assets/javascript/app/assets/stylesheets 中;在这些文件夹中,每个 View 都有一个文件,还有应用程序级文件。这使您的构建过程变得简单明了 - 您只需担心 2 个文件夹,并且不必在每次创建新 View 时都修改您的构建。
  • 我如何构建我的 View - 我有应用程序级 View 和特定页面 View 。 同样 - 主要是一个方便的问题。在 Rails 中,所有模板都位于 /app/views 下。应用程序级 View 位于名为 /app/views/layouts 的文件夹中 - 它们与页面级模板并没有太大区别,因此将它们移出该文件夹似乎并没有太大的效果很多,而将所有内容都放在同一个顶级文件夹中会使构建和配置更简单。

所以,不,没有理由按照您的建议去做。

关于php - 没有紧凑结构的 MVC 应用程序的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51528114/

相关文章:

php - 让 PhpStorm 对命名空间和路径执行区分大小写的一致性检查?

backbone.js - 我何时或为什么会使用 marionette.behavior?

java - 我是否使用 MVC 正确实现了 n 层应用程序?

iOS:通过网络应用程序播放 RTSP 播放器

java - 2 个独立的 Web 应用程序如何与 Hibernate 共享二级缓存?

javascript - 使用 AngularJS 创建实时 feed

php - Laravel 与多个模型的接口(interface)

php - 如何压缩文件夹并使用php下载它?

javascript - 我在尝试将上传媒体按钮添加到自定义元框时遇到问题

asp.net-mvc-3 - ASP.NET Web API 问题 - 授权/身份验证