magento2架构之pwa

7天成为Magento系统架构师,现在开始学习Magento全栈开发!

《Magento2.X企业级开发实战》

Magento 的原始架构
Magento 1(及其分叉后继项目 OpenMage)使用“Web MVC”(模型、视图、控制器)架构。这是用于创建“全栈”应用程序的成熟模式。我第一次看到这种架构在 Java Struts 中使用,Web MVC 被 Ruby on Rails 广泛普及。 Symfony 和 Laravel 是两个流行的全栈 PHP 框架。

完整的堆栈框架旨在允许单个开发团队创建和部署功能齐全的 Web 应用程序。该框架具有用于处理服务器上传入的 HTTP 请求的代码、用于响应这些请求的代码以及用于组合基于 HTML/CSS/Javascript 的接口的代码。它们旨在构建 Web 应用程序,但也可以构建供其他应用程序使用的 Web API。

相比之下,React 不是一个完整的堆栈框架。它是用于构建 UI 的前端框架。 React 调用 Web 服务,但不能自己创建 Web 服务。 Express 不是一个完整的堆栈框架。它是用于创建 Web 服务器的后端框架。您可以同时使用 React 和 Express 来完成全栈工作,但它们本身都不是全栈框架。

让我们广泛地看一下 Magento 1 的 MVC 架构

当 HTTP 请求进入系统时,它被路由到类文件中的一个方法。这个类叫做控制器,这个方法叫做动作方法。每个操作方法都映射到一个 URL。我发现将这些方法视为主要入口点很有用。

一个动作方法有两个职责。

首先,它将与数据层(这是 MVC 中的模型)交互以获取和保存数据。如果用户请求列出数据的网页,则操作方法将包含获取该数据的代码。如果用户提交了表单或其他保存数据的请求,操作方法将包含保存该数据的代码。

其次,动作方法准备视图数据并通知系统的其余部分是时候渲染视图层了。在 Magento 中,这意味着发布布局句柄,加载布局系统,然后渲染布局。这也可能意味着为布局准备数据,具体取决于您使用的是哪个时代的 Magento 1 代码。

在 Magento 中,视图系统也称为布局系统。 Magento 的布局系统呈现 PHP (phtml) 模板文件树。每个模板都与一个 PHP 类相关联,这些 PHP 类称为块。 Magento 的工作方式与其他 PHP MVC 系统略有不同,因为有时这些块直接从数据库读取数据,而不是使用由控制器操作方法准备的数据。因此,这些块有时称为 ViewModel。

布局系统呈现使用 javascript 逐步增强的 HTML 页面。 Magento 1 附带了古老的 Prototype.js 框架。许多 Magento 扩展和主题都引入了 jQuery 或其他适合渐进增强的框架。

你可以写一本关于 Magento 布局系统的书——事实上,我已经写了两本。如果您想了解有关此系统的更多信息,Magento 1 和 Magento 2 仍然可以使用 No Frills Magento Layout。

MVC 系统不是 Magento 1 的唯一系统。有一个模块系统,允许程序员通过共享全局配置以共享方式向应用程序添加代码。有一个事件/观察者系统。有一个活动记录,如模型系统和 Magento 臭名昭著的 EAV 模型系统。有一个用于将菜单和页面添加到后端 UI 的系统,以及一个用于添加 UI 可设置配置值的系统。有一个基本的猴子补丁/依赖注入系统。有主题系统。

它的系统一直在下降。

对于机构所有者,甚至机构开发商来说,这似乎是过度设计的。但有些人认为过度设计,而另一些人则认为这是一个稳定的软件平台。 Magento 的架构允许第三方开发人员做与核心开发人员正在做的完全相同的事情,并且以一种最稳定的方式进行。

这种过度工程促成了 Magento 早期成功的很大一部分。

进入 Magento 2
Magento 2 首次发布时,伴随着一系列开发者活动。将模块和主题移植到新系统是一项耗时的任务。很自然地想知道 Magento 2 的架构中发生了什么变化以使其成为必要。

嗯,在最高级别 – 没有架构变化。

Magento 2 仍然是 Magento 一直以来的基于 MVC 的系统。它的基本架构模式是相同的。请求仍然路由到控制器,控制器仍然可以执行数据库操作并告诉视图呈现,视图仍然是嵌套的 phtml 模板块,有时(在 M2 中更常见)与数据库对话。页面和应用程序仍然是 HTML、CSS 和 javascript 的混合体。

但改变的是 Magento 系统的每一层都进行了显着重构。这种重构通常伴随着新的抽象层

如无特殊说明或标注,任何个人或组织,复制、转载、采集本站内容请注明:
本文来源于:【Magento中文网】,并添加本文地址链接。
如未按上述操作复制或转载,本站有权追究法律责任。
若本站内容侵犯了原著者的合法权益,可联系我们进行处理。