在一个 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
目录之外的文件夹中,因此它们也可以被任何其他应用程序访问。
我想过——实际上想了很多——关于执行以下两个步骤:
- 将
templates
目录移动到src/Application
文件夹。 - 将
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 框架之后,我意识到它们都将两个文件夹(templates
和 assets
)与应用程序文件夹完全分开。
所以我想问一下:有没有什么具体的原因,为什么我提出的两个目录的移动不能,或者不应该做?
谢谢。
最佳答案
这完全取决于您想要实现的目标以及您的工作流程。您似乎在使用 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/