Php 我应该如何组织一个通用编程库&x27;s目录结构?
我已经编写了自己的通用PHP库一段时间了,我正在考虑如何组织目录结构,但我想在正式确定库的目录结构之前先了解一下人们的想法 以下是我到目前为止的情况: 我想我可以“按主题”或“按类别”来做。到目前为止,我只能想到一个我喜欢的“按类别”的例子:Boost 另外,Qt是按模块组织的,但我认为这有点混乱,因为所有东西都塞进了QtCore 有什么想法吗 提前谢谢 更新: 我发现了一本非常棒的书,书中向我展示了许多优秀的图书馆设计惯例: 更新: 我发现一篇有趣的文章提到了代码的组织()。底部写着: “你的代码树会是什么样子?他想用这些词来描述它:简单、实用、优雅、正交、可组合。这是一个理想,但现实有点不同。”Php 我应该如何组织一个通用编程库&x27;s目录结构?,php,organization,Php,Organization,我已经编写了自己的通用PHP库一段时间了,我正在考虑如何组织目录结构,但我想在正式确定库的目录结构之前先了解一下人们的想法 以下是我到目前为止的情况: 我想我可以“按主题”或“按类别”来做。到目前为止,我只能想到一个我喜欢的“按类别”的例子:Boost 另外,Qt是按模块组织的,但我认为这有点混乱,因为所有东西都塞进了QtCore 有什么想法吗 提前谢谢 更新: 我发现了一本非常棒的书,书中向我展示了许多优秀的图书馆设计惯例: 更新: 我发现一篇有趣的文章提到了代码的组织()。底部写着: “你
/
应用/
配置/
application.ini
控制器/
助手/
形式/
布局/
过滤器/
助手/
剧本/
模型/
模块/
服务/
观点/
过滤器/
助手/
剧本/
Bootstrap.php
资料/
缓存/
索引/
地区/
日志/
会议/
上传/
文件/
图书馆/
公开的/
css/
图像/
js/
.htaccess
index.php
剧本/
工作/
建造/
临时工/
测验/
来源:我想说一个好的开始是看看其他框架和/或库是如何做到这一点的 就我个人而言,我喜欢这种组织方式,它有一个相当平坦的名称空间,所有主要组件都在Zend目录中。当使用Zend MVC项目结构时,您会得到一个添加的自动加载程序,将所有类命名为
Zend_Form
,并将其放入Zend目录中名为Form.php的文件中,以便在调用新Zend_Form
时,自动加载程序会查找Zend/Form.php
。只有“main”类直接位于Zend文件夹中,任何附加类文件(如异常和摘要)都放在Zend/Form
文件夹中,类名(如Zend\u Form\u Exception
)会导致自动加载程序查找Zend/Form/Exception.php
另一点是,让后端逻辑远离任何公共的html文件夹。例如,这里应该只有用户可以直接访问的文件(javascript、css和loader.php+.htaccess)。然后让loader.php包含它需要的文件,通常是一个目录级别
外部库通常被视为这样,并与/lib、/library和/或/vendor文件夹中的其余代码分离,以表明外部作者负责这些类。首先,选择的结构是一个折衷的决定,这意味着您必须根据您的目的处理某些方面并优先考虑其他方面。您可以遵循一些分组标准,例如:
- 功能性内聚性,我认为这应该是您设计中最强大的。具有相同或类似功能的类/文件/资源应放在一起
- 组件层次结构,这取决于您选择的粒度级别,这意味着如果您更喜欢细粒度组件而不是粗粒度组件,那么一个文件夹中的文件/资源会更多或更少。这可以使用文件夹层次结构和嵌套进行控制
- 更改,某些文件比其他文件更容易更改,您必须记住这一点,以便根据修改的可能性提供文件夹层次结构
- 可扩展性,要使框架对几乎任何场景都有用和适用,您必须提供扩展组件和功能的可能性。为扩展添加一个文件夹(又名插件)是一个好主意
你应该使用很多标准,但要始终记住这些标准。您可以在(Ivar Jacobson et al.)等书中搜索包管理,我希望这会有所帮助。我建议您看看最近的两个php 5.3框架和 他们背后的核心开发人员(以及其他主要框架开发人员和php名人)积极定义标准php 5.3命名约定,以便他们各自的组件可以相互使用,Zend和其他可能遵循相同约定的库/框架: 在这两种情况下,bundle/library都是一流的公民,在组织它们时,它们遵循相似的模式 特别是锂核心,它本身就是一个图书馆。它是这样组织的:
$ ls
LICENSE.txt analysis core g11n security template tests
action console data net storage test util
(我倾向于认为Symfony 2有点混乱/预测性较差,但这只是我自己的观点。)由于它是一个多用途的库,专门用于解决多功能问题或为常见功能提供接口,因此最好按
主题
进行结构,它可能是数据类型/技术/语言/协议等
+ Http
- request
- response
+ util
- status_codes
+ Html
- Validator
+ Form
- UploadFile
+ Tag
+ JavaScript
- JSON
+ Ajax
+ XML
- Reader
- Writer
- Parser
+ DataType
- Array
- Integer
- String
- Double
- Float
+ util
- datatypes_cast_lib
最重要的是:
- Http这是一种协议,因此您的
将是执行Http请求的接口Http.request
- Html是一种标记语言,因此
将为开发人员提供创建上传文件表单的功能Html.Form.UploadFile
- JavaScript这是一种编程语言,因此您的JavaScript.JSON可能会解决从JSON到数组的转换问题
- Ajax哪种是技术
- XML这是一种标记语言 <
+ Http
- request
- response
+ util
- status_codes
+ Html
- Validator
+ Form
- UploadFile
+ Tag
+ JavaScript
- JSON
+ Ajax
+ XML
- Reader
- Writer
- Parser
+ DataType
- Array
- Integer
- String
- Double
- Float
+ util
- datatypes_cast_lib
+ Core
- Array
- String
+ Encryption
- MD5
- SHA1
...
+ Core
- Array
- String
+ Encryption
- MD5
- SHA1
...
+JQuery
+ Core
- Array
- String
+ Encryption
- MD5
- SHA1
...
+ Encoding
- JSON
+JQuery
+ Core
- Array
- String
+ Encryption
- MD5
- SHA1
...
+ JQuery
- Datepicker