我使用Zend Framework开发web应用程序。
现在,我有一个庞大的库,它包含了每个东西,由几个Web应用程序使用。我正在考虑使用“模块”的概念重新组织它。
但我不确定Module和Package之间的区别。
我的理解是:
我看到了吗?如何知道我的课程应该去哪里(模块或库的模型)?
因为例如,我有一些类来进行翻译。我有“模型”类,代表一种语言,一种文本及其引用......我有一种“API”类,它只是将字符串翻译成一种语言。我会说我需要一个模型类和web界面的模块来编辑traductions,API类会进入库吗?是对的吗 ?拥有2种类,一种用于模块,一种用于库,这并不奇怪。
我想这是一个关于API,librairie和应用程序架构的开放性问题。
答案 0 :(得分:3)
模块,在ZF意义上,具体组合,通常是独立的,应用程序部分:
模块允许开发人员将一组相关控制器分组到逻辑组织的组中。 modules目录下的结构类似于application目录下的结构。 [...]模块的目录结构应该模仿推荐项目结构中的应用程序/目录
另一方面,包是概念上属于一起的代码库中的一组类。例如,ActionHelpers和ControllerPlugins在概念上属于Zend_Controller
包。所有可用的Validator类都属于包Zend_Validate
。
使用PHPDocumentor时,您可以注释您的代码属于包。如果您查看ZF的API文档,您将看到此分组生效。尝试找到Zend_Validate_Alpha
类。
见
答案 1 :(得分:1)
包是命名空间区域,因此具有相似名称的符号不会相互冲突。例如,符号& main :: first与symbol& List :: Util :: first不同。包是sysbols的名称前缀。
模块是代码文件或字节码树。模块可以在磁盘上预编译(.pmc),未编译(.pm);或者作为一个单元预先加载到内存中 - 假设没有自动分裂。
总结:包是关于命名空间的,而模块是关于文件的。它们是不同的东西,比如苹果和盒子 - 直到你开始将一种苹果放入一种盒子的那一天,人们开始认为苹果和盒子是相关的。他们是!但仍然,一个在水果,另一个是一种容器。
答案 2 :(得分:0)
在我看来很简单:
模块就像smarty(具有目标目标模板的库)
包是2个或更多模块,彼此协作以提供更完整的解决方案
再一次,我简单的观点。