【发布时间】:2009-09-10 19:35:59
【问题描述】:
当我谈到脚本语言时,我指的是 Python、Perl 和(就我而言)PHP 等语言。在使用 CodeIgniter、Zend 和许多其他有趣的 MVC 系统之后,似乎很明显,一个人似乎同意的一件事是文件夹结构(以及其他事情_like_that)。这确实给我带来了问题,因为我找不到任何关于不同结构设计的好处的好的文档。大多数人只是推荐一个,因为这是他们使用的,而不考虑改进设计。
我希望我们都同意的一件事是,在自动加载类时检查文件系统中的现有文件是非常糟糕的做法。我们的类不应位于 5 个可能的位置之一,这会导致对我们加载的每个库进行大量的 file_exists() 检查。
因此,无论如何,我正在尝试收集可以比较的目录结构,以便在规划应用程序时找到最佳实践:
- 基于 OOP,这很可能意味着 MVC
- 范围国际化并支持语言文件/翻译
- 对模块/插件开放,因此可以将完整的包放入我们的代码库中
- 明确定义正在发生的事情以及在哪里查找给定的类
- 可能支持在同一结构下运行的多个站点(请参阅下面的 /site 目录)
这就是我目前所拥有的。请记住,libs 只是一个术语,表示您的主库/类目录,甚至可能包含模型,具体取决于文件夹结构。另外,我排除了任何类型的静态内容(JS/CSS/图像),因为这些东西是事后才想到的,与我们的服务器端代码无关——它甚至可能在另一台服务器上!缓存、文件上传、语言和所有其他生成的内容也是如此。
/controllers
/views
/models
/libs
/config
index.php
这让我想起了 Zend 框架,它将所有内容都堆放在一个 libs 文件夹中(其中还包括子文件夹以保持事物井井有条)。仅适用于单个站点。
/libs
/site
/controllers
/views
/models
/config
index.php
这将是上述结构的多站点版本。
/libs
/functions
/site
/controllers
/models
/views
/config
/site2
/controllers
/models
/views
/config
/modules
/user
/controllers
/models
/views
index.php
这将是允许多个站点和插入模块的版本。这些模块将是独立的 MVC 应用程序,例如包含业务逻辑、CRUD 和视图的论坛。
那么有没有人完美的结构可以分享或指导我选择一个好的可扩展设计?
【问题讨论】:
标签: php model-view-controller filesystems