Warning: Cannot modify header information - headers already sent by (output started at /www/wwwroot/sbboke.com/wp-content/plugins/wordpress-seo/src/integrations/front-end-integration.php:409) in /www/wwwroot/sbboke.com/wp-content/themes/pacify/content-single.php on line 5

magento2 核心开发特点

M2是基于zend framework框架的,只不过在它身上加了一层华丽的皮,隐藏了zend framework的底层接口,封装了自己的接口。
所有我们写代码的时候,只需要调用M2自己的类和方法就行

如果说Linux一切设备皆文件,那么M2一切设计皆XML。
不管是主题还是插件还是API还是数据库 都有XML的身影,正因为它,M2才这么灵活强大!

如下几个特点 算是很牛逼到位之处:

页面xml布局

让你在不动源码的情况下,尽情任意修改页面布局。
每个页面都有唯一的辨识符的xml文件,这个页面的布局都由该xml生成,你可以任意增删改这个xml文件,实现各种效果。
xml文件里放的是各种block,这个block就是每个块,真正输出内容的地方。
以产品详情页为例:

可以看到非常灵活,至于具体怎么增删改,我们在Magento2主题这一章节具体讲解。

数据库EAV结构

E ->实体
A -> 属性
V -> 值

EAV模型是一种数据模型,用于描述实体的数量预计会很大,但事实上,实体中要使用的属性数量并不多。

M2这么设计,其实说白了就是为了灵活性,在不影响主干的基础上,任意新增删除属性。

EAV模型说白了就是分表,不需要把所有字段都放在主表里,而是按类型存放在不同的副表上。
对于字段少的项目来说 EAV其实没啥用 效率不高。

按照常规做法,比如一个产品的所有相关属性都会存放在产品表里,增删改查的都是这一个表。
EAV模式 就是把这些属性按照类型独立分开存放到不同表里的。
所有查询属性值的时候会比较麻烦 要联表查询。

不过M2里不用担心,他提供了非常简单的方法,直接get属性名就得到值了,不需要你手动去写sql查表。

实体存储的是数据类型的信息。
就Magento而言,就是Customer,Category,Product等。

属性是每个实体的单独属性(比如name,weight,email)。

值是实体某个属性的值。

比如,产品有个属性叫产地(Manufacture),它的值为中国。
那么产品就是实体,Manufacture就是属性,中国就是值。

EAV模型带来的好处如下:

  1. 灵活的多功能数据结构(可以在不更改数据库模式的情况下更改属性数量)。
  2. 为给定实体添加新属性时,我们有可能在其他实体中使用它
  3. 快速实施。

EAV实体的数据库模式:

  1. eav_entity - (E)实体表。
  2. eav_entity_attribute(A)属性表
  3. eav_entity_ {type}(V) - 值表。{type} - datetime,decimals,int,text和varchar。
  4. eav_attribute 里面是所有实体的属性

带有eav_ *表格的图表:

Magento 2中有哪些EAV实体:
实体列表可以在eav_entity_type表中找到:

customer
customer_address
catalog_category
catalog_product
order
invoice
creditmemo
shipment

Magento 2中有哪些EAV属性类型:

eav_entity_int
eav_entity_varchar
eav_entity_text
eav_entity_decimal
eav_entity_datetime

这5种属性类型就相当于字段类型。

  • int 对应mysql字段的int类型
  • varchar 对应mysql字段的varchar类型
  • text 对应mysql字段的text类型
  • decimal 对应mysql字段的decimal类型
  • datetime对应mysql字段的datetime类型

比如产品的name 是varchar类型。
他的值存在catalog_product_entity_varchar表里。

知道了这个原理,你就很轻松的知道属性和值在哪个表里。

聪明的你会觉得,把属性分散存在不同的表里,如果要查询全部属性的话,要联十几张表,是不是太耗资源了?
这点,M2官方也考虑到了,以产品为例,他提供了catalog_product_flat表,也就是说后台开启flat模式后,查产品数据就直接读取这个表,他把属性都存放在这个表里了。

catalog_product_flat是按store id来分的。如果你有多网店的话。
比如:

catalog_product_flat_1  //代表store id为1的所有产品数据
catalog_product_flat_2  ////代表store id为2的所有产品数据

缓存

俗话说东西吃多了就变胖了,胖了就不灵活了,走路都喘气。
M2是个灵活的胖子,他的缓存是其杀手锏。

可以看到,缓存的类型多不胜数,后台轻松设置。
默认是开启了全部缓存类型。

缓存多了 也有很多弊端,就是对开发者不友好,导致开发过程中改了代码后 发现前台页面总是不生效,折腾半天 原来是缓存的问题。

所以我建议是开发版本里禁用所有缓存。 线上版本开启所有缓存。

我们刚开始不需要搞清楚所有缓存类型代表什么意思。等你熟悉一段时间后 再研究会更明白。

模块化

composer是个好东西,希望你会用。

m2的核心代码都是模块化的,可以任意开启禁用。
同理,第三方插件和主题也都是模块化的,可以通过composer来安装升级或者打包上传。
如果你安装了第三方插件或者看M2的核心代码的话,你会发现都有composer.json这个玩意。
这个就是用来安装/打包上传插件的。里面定义了各种依赖库以及插件源地址

安全性

M2的安全性也是其杀手锏,几乎没有被黑过。
社区会每隔1-2个月出安全补丁,自己下载安装就行。
老版本也会出对应的安全补丁。

相关文章

0 0 投票数
文章评分
订阅评论
提醒
0 评论
内联反馈
查看所有评论