一 介绍
面向对象编程(OOP)设计允许 大的灵活性和可扩展性的软件组件,允许您设计和实现高度定制的网站。OOP原则的优点包括纳入行业标准编程设计模式和严格的业务逻辑分离从演示。继承是重要的,也符合经典的面向对象的编程方法,Magento的平台提供的核心部件和基本功能,可以继承的自定义组件的一个特定的网站或应用程序。
这支持从业务逻辑分离视觉呈现。这种划分使商店的外观和行为定制。架构层也为程序员提供了一个理解复杂系统中的功能和代码的优化配置的高层次模型。Magento的调整经典的模型-视图-控制器的建筑模型,虽然:文件中的模块通常是按功能而不是文件类型。
表示层提供视图组件(布局、块、模板)和控制器,它处理命令和用户界面。的表示层还可以包括Web API服务绑定。(包括我们这些服务绑定在这个讨论的表示层模型因为Web API调用来就像浏览器通过HTTP请求,并可以通过Ajax调用的用户界面。因此,虽然Web API调用可以源于外部应用程序,但也可以源于用户界面。
通过服务合同使用的服务层定义业务逻辑相互作用的整体界面(例如,创建客户和税率)。服务合同简化了替换或修改(通过插件)服务的过程。
领域层(也被称为业务逻辑层)提供基础类、业务逻辑和功能资源模型和数据访问的功能,你可以扩展和定制。
Magento使用依赖注入和服务合同的简化提供了一种新的定义的API的实现过程。
一个模块是一个Magento系统的基本功能单元。Magento模块包含的逻辑来执行所需的操作和功能。你将通过写作和加入新的模块到你安装Magento的核心特征。使用Magento的主题和语言包创建您的商店的视觉设计和语言能力。
扩展和自定义Magento商店的PHP的核心部件,HTML5和CSS3的默认主题和语言包精确地控制你的网站的性能和外观。
Magento的技术堆栈部署大量强大的工具集,分布式的店面和为您的特定需求定制产品。Magento的堆栈包括流行的开源技术,如Linux操作系统,Apache / Nginx服务器,MySQL,Zend,Composer.
二 架构图
这取决于你的作用和目的,学习更多关于Magento,有几种不同的方式查看Magento的架构。例如,开发人员希望创建新的模块或者自定义现有模块会想了解一个模块本身的架构,以及如何融入更大的视野,与Magento
2框架等组成。然而,一个商人谁想要迅速建立一个网上商店前要查看从更高层次的组件的集合,并了解组件的外观,感觉和用户交互组件的影响。
Magento 2的产品架构由核心产品代码加可选模块。这些可选模块增强或替换基本产品代码。
如果你基本上是定制的基本模块开发Magento产品,将你的焦点。模块组织支持特定任务或功能的代码。一个模块可以包括代码来改变店面的外观和感觉,以及它的基本行为。
你的模块功能与核心Magento产品代码,这是组织成层。了解软件分层模式是理解基本的Magento产品组织的关键。
分层的软件是一种流行的,广泛讨论的原则在软件开发。许多资源存在这个主题,但考虑咨询模式为导向的软件体系结构的一般讨论。
架构层为:表示层 服务层 领域层 持久层
分层的设计应用提供了许多优:
业务逻辑与演示逻辑的严格分离简化了定制过程。例如,您可以更改您的店面外观,而不会影响任何后端业务逻辑。
明确组织代码可预见点扩展开发者到代码位置。
三 Magento2组件
Magento是用于创建自定义的网站,几个核心组件的应用程序,和系统集成。当你改变你的Magento商店的外观或行为,你都不可避免地改变一个或多个这些 Magento 2组件,包括 模块, 主题, 和 语言包,等等。
@模块概述
Magento2的模块是什么?
Magento 2的模块就是一个独立的功能模块,相当于插件。
模块组件
一个模块包含php和xml文件(blocks, controllers, helpers, models) magento模块包括主题, 库, 和 语言包.
查看 模块结构 概述。
模块目录在哪里?
模块通常在 app/code app/code/<Vendor>/<ModuleName>. 例如, Customer 模块在 app/code/Magento/Customer.
@模块和区域
区域是为优化的请求处理组织代码的逻辑组件。Magento使用地区简化Web服务调用的仅加载相关的代码指定区域的。每个定义的Magento默认区域包含完全不同的代码如何处理URL请求。
例如,如果您正在调用REST Web服务调用,而不是加载与生成用户HTML页相关的所有代码,则可以指定一个单独的区域,该区域加载代码,其范围仅限于响应REST调用。
@模块规范
模块必须符合关于magento2 编码规范。使用或开发模块时,请记住这些约定。
查看编码规范.
模块位置协议 :实体 位置
自定义模块的代码库 /app/code/<Vendor>/<Module>
自定义主题文件(店面) /app/design/frontend/<Vendor>/<theme>
自定义主题文件(模块) <Module>/<theme>
如果你想使用一个库 /lib/<Vendor_Library>
@模块的关系
了解一个模块与另一个模块的关系有助于确定它对模块中的变化有何反应。
单个模块可以与其他模块有下列类型的关系:
使用: 模块A使用模块B,如果调用模块B的行为
反应: 模块A对模块B进行反应,如果它的行为由模块B中的事件触发,而模块B不知道模块A
定制: 模块 A 定制 模块 B 如果模块A修改模块B的行为
实现: 模块A实现模块B
取代: 模块A取代模块B
关系型和场景
如下图:
如下图:
如下图:
如下图:
@模块依赖
软件依赖标识一个软件组件依赖于另一个适当的功能。Magento的架构的一个核心原则是软件的依赖 小化。而不是与其他模块密切相关,模块的 佳设计是松耦合。松散耦合的模块需要很少或根本没有其他模块的知识来执行他们的任务。
每个Magento模块负责一个独特的特征。在实践中,这意味着:
几个模块不能负责一个功能。
一个模块不能负责几个功能。
模块依赖在其他模块必须显式声明。还必须声明对其他组件的依赖(例如,主题、语言包或库)。
删除或禁用模块不会导致禁用其他模块。
@模块依赖类型
两种类型依赖
有两种类型的Magento模块依赖 : 硬和软依赖
硬依赖
一个模块硬依赖另一个模块没有它依赖的模块就不能运行
软依赖
一个模块软依赖另一个模块,都可以独立运行。