Megento 架构基础知识概述javascript
Magento整合了面向对象的基于PHP的应用程序的核心架构原则。这些通常原则的综合讨论既有在线的,也有印刷形式。如下讨论主要关注这些主题如何直接应用于Magento:php
- Magento技术堆栈
- Magento查看模型
- 可扩展性
- 模块化
- 事件驱动的体系结构
- 安全
架构图:html
Magento架构从不一样的角度根据您的角色和学习Magento更多信息的目的,有几种不一样的方式能够查看Magento体系结构。前端
例如,想要建立新模块或者可能定制现有模块的开发人员将但愿经过Magento框架和其余组件了解模块自己的架构,以及它如何适应更大的视图。可是,想要快速构建在线商店阵营的商家但愿从更高级别查看组件集合,并了解影响外观,感受和用户交互组件的组件。java
架构层图下图说明了Magento的组件,并显示了全部组件的“层”或层,以及Magento框架,第三方库,支持的数据库和其余技术。
jquery
》可扩展性和模块化linux
什么使产品具备可扩展性?nginx
Magento的可扩展性描述了产品内置的能力,让开发商和商家随着业务的增加而按期扩展店面的功能。如下是影响可扩展性的主要因素。算法
指导产品结构的架构原则 数据库
Magento软件开发模式的核心是替换或扩展核心代码而不是编辑它的作法。这一策略支持您尽力维护咱们提供的测试代码的完整性,同时仍普遍地定制您的店面。
开源软件来建立和管理扩展
Magento创建在为开发社区而开发的开源技术上。例如,它使用Composer来管理依赖关系。请参阅Technology Stack了解所用技术的完整列表。
编码标准
遵照标准的PHP和JavaScript代码最佳实践可确保代码基础健全。Magento已经采用了PHP的大部分Zend Framework编码标准。有关更多信息,请参阅编码标准。
升级和版本控制策略
Magento具备明肯定义的升级和版本控制策略,可帮助您避免软件组件依赖关系出现任何问题。确认模块版本与Magento Framework版本兼容后添加模块。
》易于前端定制
Magento前端旨在优化店面定制,高度可扩展的主题是中央定制机制。鼓励商家使用Magento组件和主题来扩展和改变店面的外观。
店面定制工具Magento提供了几个工具来帮助您大幅启动店面定制过程:
有关建立主题的信息,请参阅前端开发人员指南。
》支持可扩展性的全局功能
基本的品质促进整个Magento组件的扩展性。本讨论的重点在于:
模块化
模块的概念是Magento扩展开发的核心,软件组件的模块化设计(特别是模块,主题和语言包)是该产品的核心架构原则。独立代码的独立模块按功能进行组织,从而减小每一个模块的外部依赖性。若是模块是独立的,那么您能够修改或替换它,而不会影响代码的其余部分。软件组件的松散耦合减小了整个代码变动代码的连锁反应。
依赖流行的设计模式
依赖于已知的架构和编程结构有助于PHP开发人员将本身定位于影响特定产品生态系统中编码的特定开发问题。
这能够减小新Magento开发人员的学习曲线。
设计模式是通过时间考验的,被普遍承认的软件架构结构。
Magento产品体系结构包含许多众所周知的模式,但模型 - 视图 - 控制器(MVC)对扩展开发人员特别感兴趣。
编码标准
Magento开发人员应该熟悉咱们的编码标准,最佳实践和惯例,特别是PHP文件格式标准,编码风格和文件命名约定。Magento标准基于Zend Framework编码标准。有关准则和要求,请参阅编码标准。
丰富的产品系统
更普遍的Magento生态系统为扩展提供了普遍的社区和丰富的第三方市场。访问Magento Marketplace,了解可供下载的许多模块和主题的概述,以及购买模块和主题包,这些为扩展店面提供了更多的可能性。
灵活的属性类型
您能够经过向默认产品属性添加惟一属性来加强店面效果。例如,您可能须要添加一个新属性来描述产品,例如纹理或行业特定评级。您能够从Magento Admin中添加这些属性,而且店面显示它们。
属性类型分为三大类:
EAV(实体 - 属性 - 值)属性是特定于站点的属性,您可使用Magento Admin为本地站点定义属性。自定义属性是EAV属性的子集。使用EAV属性的对象一般将值存储在多个MySQL表中。客户和目录模块使用EAV属性。扩展属性一般使用比自定义属性更复杂的数据类型。这些属性不会出如今店面中。扩展属性由模块引入。有关使用属性的信息,请参阅PHP Developer Guide。
Web API
可使用一些简单的XML将Magento或第三方服务配置为Web API(REST或SOAP)。您可使用这些服务将您的Magento安装集成到CRM(客户关系管理),ERP(企业资源规划)后台系统和CMS(内容管理系统)等第三方应用程序中。有关更多信息,请参阅Magento Web API入门。
服务契约,依赖注入和依赖倒置服务合同
提供了一种访问公共API端点的新方法。这些PHP接口提供强大,稳定的客户端能够链接的扩展点。服务合约定义了做为模块的公共API的端点。定义这些端点是添加模块的重要部分。服务合同在整个Magento文档集中讨论。请参阅服务层以进行高层介绍。有关服务合约和依赖注入的更详细讨论,请参阅PHP开发人员指南。
Magento实现了依赖注入和服务契约。依赖注入提供了一种机制,能够在不改变客户端或理解实现细节的状况下改变模块的行为。依赖注入及其相关的概念依赖倒置支持Magento的模块化和易扩展性的基本架构原则。他们强烈鼓励支持松散耦合软件模块的基本编码实践。有关依赖注入和服务合约的信息,请参阅PHP开发人员指南。
插件
插件与模块同样,是为核心Magento产品添加功能的机制。经过插件,您能够更改Magento类中任何公共方法的行为。你能够认为它是一种使用Plugin类的扩展形式。
插件也称为拦截器。应用程序使用插件模式来更改方法行为,而无需修改实际的类。插件一般能够在方法运行以前或以后拦截方法处理,或仅在方法抛出异常时拦截方法处理。请参阅PHP开发人员指南中的插件,了解有关声明插件和优先化插件的信息。
------------------------------
-安全
概述加强密码管理Magento增强了用于密码管理的散列算法(SHA-256)。经过将转义数据设为默认值,改进了对跨站点脚本(XSS)攻击的防范Magento框架已经经过了规范输出数据转义的约定。这些约定包括为HTML页面(HTML,JSON和JavaScript)和电子邮件转义输出的能力。在可能的状况下,转义对客户端代码是透明的。请参阅前端开发人员指南中针对XSS攻击的安全措施。
》更灵活的文件系统全部权和权限
从2.0.6版开始,Magento再也不明确设置文件系统权限。相反,咱们建议某些文件和目录在开发环境中可写,而且在生产环境中是只读的。为了向您提供一种简单的方式来限制对生产中的文件系统的访问,咱们为您提供了使用umask进一步限制这些权限的灵活性。有关开发和生产中的全部权和权限的详细信息,请参阅开发和生产中的Magento全部权和权限。
》改进了对点击劫持漏洞的预防
Magento经过使用X-Frame-Options HTTP请求标头保护您的商店免受点击劫持攻击。有关更多信息,请参阅X-Frame-Options标题。
》使用非默认的Magento Admin URL
一个简单的Magento管理员URL(如管理员或后端)可使用自动密码猜想轻松定位针对特定位置的攻击。为了防止这种类型的攻击,默认状况下,Magento在安装产品时会建立一个随机的管理URI。提供了CLI,以便您能够在忘记密码时查看密码。您也可使用CLI更改此URI。虽然使用非默认的管理员URL并不能保护网站,但它的使用将有助于防止大规模的自动攻击。有关更多信息,请参阅显示或更改配置指南中的Admin URI。
---------------------------------
店面定制策略
咱们能够归纳介绍Magento支持的店面定制范围。
这个范围跨越了最简单的定制,这些定制只涉及对默认Magento店面设置的小增长,以彻底替代Magento提供的HTML和CSS。
》店面定制级别
为了增长复杂性,列出了潜在店面定制的这四个级别。
------------------------
技术堆栈
版本2.0.x
版本2.1.x
Magento高度模块化的结构包括如下开源技术。
Web服务器
PHP
数据库
HTTP加速器
缓存存储
搜索
Solr(仅限Magento Enterprise Edition)
Elasticsearch(仅限Magento企业版2.1.x)
其余技术
可选堆栈组件
Magento兼容但不支持:
自动化测试
Magento还提供自动化测试套件,包括单元,集成,功能和性能测试脚本,以及用于静态代码分析的JavaScript测试和工具。组件包括用于单元测试框架的PHPUnit和用于功能测试框架的Selenium。
该框架位于dev/tests目录中。功能测试框架mtf能够在单独的存储库中找到。有关更多信息,请参阅功能测试框架指南。
------------------------------
向后兼容
商家和开发商但愿在Magento 2的修订之间升级的过程尽量简单。对于商家来讲,这个过程必须具备成本效益,而开发人员但愿他们的扩展尽量地向前兼容。
为了帮助减轻这些担心,本版本为PHP代码引入了向后兼容(BC)策略。Magento 2.0使用语义版本2.0.0来代表更改是否会破坏向后兼容性。版本号格式为MAJOR.MINOR.PATCH,其中:
向后兼容性策略适用于使用@api注释的PHP代码。咱们承诺在MINOR和PATCH更新到咱们的组件时,向后兼容使用@api注释的类和方法。在引入更改时,咱们使用@deprecated注释方法。这些方法仅在下一个MAJOR组件版本中被删除。咱们将努力每一年不超过一次对组件进行主要更改。
有关更多信息,请参阅PHP开发人员指南中的向后兼容性。
------------------------------
版本控制策略
Magento系统及其组件使用软件(或“平台”)版原本指示实现中的变化(代码级别)的兼容性。经过比较相同组件的两个版本,能够判断它是否在公共API或其余重要代码更改中存在任何向后不兼容的更改。
Magento软件版本符合如下规格:
=========================