Magento 架构基础知识概述
Megento 架构基础知识概述
Magento整合了面向对象的基于PHP的应用程序的核心架构原则。这些一般原则的综合讨论既有在线的,也有印刷形式。以下讨论主要关注这些主题如何直接应用于Magento:
- Magento技术堆栈
- Magento查看模型
- 可扩展性
- 模块化
- 事件驱动的体系结构
- 安全
架构图:
Magento架构从不同的角度根据您的角色和学习Magento更多信息的目的,有几种不同的方式可以查看Magento体系结构。
例如,想要创建新模块或者可能定制现有模块的开发人员将希望通过Magento框架和其他组件了解模块本身的架构,以及它如何适应更大的视图。但是,想要快速构建在线商店阵营的商家希望从更高级别查看组件集合,并了解影响外观,感觉和用户交互组件的组件。
架构层图下图说明了Magento的组件,并显示了所有组件的“层”或层,以及Magento框架,第三方库,支持的数据库和其他技术。
》可扩展性和模块化
什么使产品具有可扩展性?
Magento的可扩展性描述了产品内置的能力,让开发商和商家随着业务的增长而定期扩展店面的功能。以下是影响可扩展性的主要因素。
指导产品结构的架构原则
Magento软件开发模式的核心是替换或扩展核心代码而不是编辑它的做法。这一策略支持您尽力维护我们提供的测试代码的完整性,同时仍广泛地定制您的店面。
开源软件来创建和管理扩展
Magento建立在为开发社区而开发的开源技术上。例如,它使用Composer来管理依赖关系。请参阅Technology Stack了解所用技术的完整列表。
编码标准
遵守标准的PHP和JavaScript代码最佳实践可确保代码基础健全。Magento已经采用了PHP的大部分Zend Framework编码标准。有关更多信息,请参阅编码标准。
升级和版本控制策略
Magento具有明确定义的升级和版本控制策略,可帮助您避免软件组件依赖关系出现任何问题。确认模块版本与Magento Framework版本兼容后添加模块。
》易于前端定制
Magento前端旨在优化店面定制,高度可扩展的主题是中央定制机制。鼓励商家使用Magento组件和主题来扩展和改变店面的外观。
店面定制工具Magento提供了几个工具来帮助您大幅启动店面定制过程:
- Magento空白主题
- Magento UI库组件
- Magento管理模式库
有关创建主题的信息,请参阅前端开发人员指南。
》支持可扩展性的全局功能
基本的品质促进整个Magento组件的扩展性。本讨论的重点在于:
- 模块化
- 依赖流行的设计模式
- 编码标准
- 灵活的属性类型
- Web API
- 服务契约和依赖注入
- 插件
模块化
模块的概念是Magento扩展开发的核心,软件组件的模块化设计(特别是模块,主题和语言包)是该产品的核心架构原则。独立代码的独立模块按功能进行组织,从而减少每个模块的外部依赖性。如果模块是独立的,那么您可以修改或替换它,而不会影响代码的其他部分。软件组件的松散耦合减少了整个代码变更代码的连锁反应。
依赖流行的设计模式
依赖于已知的架构和编程结构有助于PHP开发人员将自己定位于影响特定产品生态系统中编码的特定开发问题。
这可以减少新Magento开发人员的学习曲线。
设计模式是经过时间考验的,被广泛认可的软件架构结构。
Magento产品体系结构包含许多众所周知的模式,但模型 - 视图 - 控制器(MVC)对扩展开发人员特别感兴趣。
编码标准
Magento开发人员应该熟悉我们的编码标准,最佳实践和惯例,特别是PHP文件格式标准,编码风格和文件命名约定。Magento标准基于Zend Framework编码标准。有关准则和要求,请参阅编码标准。
- Code demarcation standard
- PHP coding standard
- PHP code sniffers
- JavaScript coding standard
- jQuery widget coding standard
- DocBlock standard
- JavaScript DocBlock standard
- LESS coding standard
- HTML style guide
丰富的产品系统
更广泛的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。
》店面定制级别
为了增加复杂性,列出了潜在店面定制的这四个级别。
- 扩展Magento提供的CSS
Magento提供了一个默认主题和一个基于LESS的CSS。
您只能使用CSS大幅改变店面。
这种简单的策略可能适合预算有限的项目,或者可能会对为站点创建不同皮肤的开发者感兴趣。
一家小企业通过从Magento Marketplace购买第三方开发的主题来扩展默认值,进入店面定制过程。
- 替换PHTML模板文件
除了扩展默认CSS外,您还可以生成不同的HTML标记。
例如,您可能需要添加缺少的CSS类名称,或者添加一个额外的<div>标签以实现一些视觉效果。
您可能还需要调整一些JavaScript以适应不同的HTML标记。
这个变化比简单地扩展Magento CSS要求更高,但仍然在小型项目和精简团队的掌握之中。
- 替换Magento提供的CSS
而不是编辑由Magento提供的默认CSS,您可能决定用自己的代码替换所有的默认店面CSS代码。
这个策略避免了将项目与Magento提供的CSS绑定,但是会增加项目开发和集成的负担。
它还允许使用Magento未提供的不同CSS工具或技术。
构建自己的一组CSS库的合作伙伴可以在不同的客户项目中重用这些库。
(这些独特的CSS库可能有助于区分市场上其他合作伙伴。)
除了替换CSS文件之外,您可能还需要更换少量的HTML和JavaScript。
- 替换Magento提供的CSS,HTML和JavaScript
提供比默认Magento安装提供的截然不同的购物体验是更重要的任务。
但是,权衡可能是将来将更多扩展集成到您的安装中的更复杂体验。
------------------------
技术堆栈
版本2.0.x
版本2.1.x
Magento高度模块化的结构包括以下开源技术。
Web服务器
- 阿帕奇
- nginx
PHP
- Composer(PHP的依赖管理包)
数据库
- MySQL的
- MySQL Percona
HTTP加速器
- Varnish (漆)
缓存存储
- Redis
- Memcache
搜索
Solr(仅限Magento Enterprise Edition)
Elasticsearch(仅限Magento企业版2.1.x)
其他技术
- HTML5
- CSS3(LESS CSS预处理器)
- jQuery(主JavaScript库)
- RequireJS(帮助按需加载JavaScript资源的库)
- Knockout.js(通过模型 - 视图 - 视图模型模式简化JavaScript UI)
- 第三方库(Zend Framework 1,Zend Framework 2,Symfony)
- 编码标准PSR-0(自动加载标准),PSR-1(基本编码标准)和PSR-2(编码风格指南),PSR-3,PSR-4
可选堆栈组件
- Varnish(缓存)
- Redis(用于页面缓存)
- Solr(搜索引擎)
- Elasticsearch(搜索引擎)
Magento兼容但不支持:
- HHVM 3.9 PHP解释器
自动化测试
Magento还提供自动化测试套件,包括单元,集成,功能和性能测试脚本,以及用于静态代码分析的JavaScript测试和工具。组件包括用于单元测试框架的PHPUnit和用于功能测试框架的Selenium。
该框架位于dev/tests目录中。功能测试框架mtf可以在单独的存储库中找到。有关更多信息,请参阅功能测试框架指南。
------------------------------
向后兼容
商家和开发商希望在Magento 2的修订之间升级的过程尽可能简单。对于商家来说,这个过程必须具有成本效益,而开发人员希望他们的扩展尽可能地向前兼容。
为了帮助减轻这些担忧,本版本为PHP代码引入了向后兼容(BC)策略。Magento 2.0使用语义版本2.0.0来表明更改是否会破坏向后兼容性。版本号格式为MAJOR.MINOR.PATCH,其中:
- MAJOR表示不兼容的API更改
- MINOR表示向后兼容功能已添加
- 修补程序指示向后兼容的错误修复
向后兼容性策略适用于使用@api注释的PHP代码。我们承诺在MINOR和PATCH更新到我们的组件时,向后兼容使用@api注释的类和方法。在引入更改时,我们使用@deprecated注释方法。这些方法仅在下一个MAJOR组件版本中被删除。我们将努力每年不超过一次对组件进行主要更改。
有关更多信息,请参阅PHP开发人员指南中的向后兼容性。
------------------------------
版本控制策略
Magento系统及其组件使用软件(或“平台”)版本来指示实现中的变化(代码级别)的兼容性。通过比较相同组件的两个版本,可以判断它是否在公共API或其他重要代码更改中存在任何向后不兼容的更改。
Magento软件版本符合以下规格:
=========================