magento2编程规范及最佳开发实栈

概述
本文档列出了指导 Magento 2 开发团队成员的基本编码和应用程序设计原则。

Magento 核心开发人员在代码审查期间使用本文档作为参考;一些规则在 Magento 静态测试中有相应的代码检查。

这些指导方针来自多年的辛勤工作、经验和讨论。我们坚信新的技术举措应该遵循这些建议,并且应该改进现有代码以满足这些建议。

文本约定
使用 RFC2119 来解释关键字,例如:

必须和不得

必需的

应该和不应该

应该和不应该

受到推崇的

可能

可选的

一、基本编程原理
1.1.不应修改函数参数。

1.2.必须在函数上声明显式返回类型。

1.3.应该使用标量参数的类型提示。

1.3.1.所有新的 PHP 文件都必须启用以 declare(strict_types=1); 开头的严格类型模式。所有更新的 PHP 文件都应该启用严格类型模式。 PHP 接口可能有这个声明。

2.类设计
2.1.对象分解必须遵循 SOLID 原则。

2.2.对象实例化

2.2.1.一个对象必须在实例化后准备好使用。不允许使用额外的公共初始化方法。

例子:
2.2.2.工厂应该用于对象实例化而不是 new 关键字。出于测试或可扩展性的目的,对象应该是可替换的。例外:DTO。 DTO 中没有行为,因此没有理由对其进行替换。测试可以为存根创建真正的 DTO。数据接口、异常和 Zend_Db_Expr 是 DTO 的例子。

2.3.类构造函数只能有依赖赋值操作和/或参数验证操作。不允许进行其他操作。

2.3.1.当参数验证失败时,构造函数应该抛出异常。

例子:
2.3.2.不得在构造函数中触发事件。

例子:
2.4.所有依赖项必须由客户端对象所需的最通用的类型请求。

例子:
2.5.代理和拦截器绝不能在构造函数中显式请求。

2.6.不应使用继承。组合应该用于代码重用。

例子:
2.7.所有非公共属性和方法都应该是私有的。

2.8.抽象类不得标记为公共@api。

2.9.服务类(提供行为但不提供数据的类,如 EventManager)不应具有可变状态。

2.10.只有数据对象或实体(产品、类别等)可以有任何可观察状态。

2.11.不应使用“二传手”。它们只允许在数据传输对象中使用。

2.12. “Getters”不应该改变对象的状态。

2.13.不应使用静态方法。

2.14.必须避免时间耦合

示例#1:
示例#2:
2.15.必须避免类设计中的方法链。

2.16.应该遵守得墨忒耳法则。

2.17.图案

2.17.1.代理应该用于延迟加载可选依赖项。

2.17.2.当需要将树作为单个对象处理时,应该使用复合材料。

例子:
2.17.3.当有多种算法来执行一个操作时,应该使用策略。

  1. 依赖注入
    3.1.对象之间不应该有循环依赖。

3.2. app/etc/di.xml 文件必须只包含框架级依赖注入 (DI) 设置。

3.3.所有模块化 DI 设置(表示层配置除外)应该存储在 <module_dir>/etc/di.xml 中。

3.4.所有模块化表示层 DI 设置应该存储在 <module_dir>/etc/<area_code>/di.xml 中。

4.拦截
4.1.仅当在某些情况下应该替换原始方法的行为时,才应使用环绕插件。

4.2.插件不应在自己的模块中使用。

4.3.不应将插件添加到数据对象中。

4.4.插件必须是无状态的。

4.5.插件不应该改变被拦截对象的状态(被拦截的对象是 $subject)。

  1. 例外
    5.1.向最终用户显示的所有异常必须以以下格式生成错误消息:

症状

细节

解决方案或解决方法

5.2.异常不能在抛出它们的同一个函数中处理。

5.3.如果函数 A 调用函数 B,并且函数 B 可能抛出异常,则此异常必须由函数 A 处理或由函数 A 的文档块中的 @throws 注释声明。

5.4.异常不得处理消息输出。处理代码决定了如何处理异常。

5.5.业务逻辑(应用程序和域)不得使用异常进行管理。应该使用条件语句来代替。

5.6.异常类的短名称必须清晰、有意义,并说明异常的原因。

5.7.抛出的异常应该尽可能具体。顶级通用 \Exception 不应在任何地方抛出。

5.8.与第三方库的所有直接通信 M

本文来源于:
Magento2.x企业级开发实战

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,056评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,842评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,938评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,296评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,292评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,413评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,824评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,493评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,686评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,502评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,553评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,281评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,820评论 3 305
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,873评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,109评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,699评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,257评论 2 341