Magento 2班级位置和名称的最佳做法


15

Magento 1我们习惯于将我们的类放在这些目录中

  • 帮手
  • 模型
  • 资源资源

并使用简单的类名,名称中间不要包含任何大写字母。

如果我们看看一些情况 Magento 2 Core

帮手

地点
- \Foo\Bar\Helper
姓名
- *.php
例子
- \Magento\ImportExport\Helper\Report
-\Magento\Cms\Helper\Wysiwyg\Images


观察者

地点
- \Foo\Bar\Observer
姓名
- *.php
- *Observer.php
例子
- \Magento\CustomerCustomAttributes\Observer\SalesOrderAddressAfterLoad
-\Magento\CustomerBalance\Observer\ProcessBeforeOrderPlaceObserver


外挂程式

地点
- \Foo\Bar\Plugin
姓名
- *.php
- *Plugin.php
例子
- \Magento\Catalog\Plugin\Block\Topmenu
- \Magento\PageCache\Model\App\FrontController\BuiltinPlugin
资料来源http://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html#declaring-a-plugin


ConfigProvider

地点
- \Foo\Bar\Model
姓名
- *ConfigProvider.php
例子
- \Magento\Tax\Model\TaxConfigProvider
-\Magento\Payment\Model\IframeConfigProvider


我的问题是:

  • 如果有任何good/ bad/ best对于在实践Magento 2
  • 例如,如果要创建自定义DataProvider,它将是什么?
    • \Foo\Bar\Provider\CustomDataProvider
    • \Foo\Bar\DataProvider\Custom
    • \Foo\Bar\Model\Provider\CustomDataProvider
    • \Foo\Bar\Helper\Provider\CustomDataProvider
  • 如何确定类名和位置,模块根目录,模型,Helper等中的文件夹的构造?
  • 是否取决于检索到的数据源/数据类型?
  • 什么时候必须将后缀添加到类名中?


响应的一部分Virtual Typeshttps : //community.magento.com/t5/Magento-DevBlog/Virtual-Types-Naming-Convention/ba-p/61510

Answers:


10

Magento 2并不像Magento 1那样仅限于一些文件夹,例如块,助手,模型等。
基本上,您可以将课程放置在所需的任何文件夹中。这取决于您,因为使用完整的类名实例化了类,而不像Magento 1那样使用别名。

我的建议是按功能分组。

  • 观察员Vendor/Module/Observer
  • 插件 Vendor/Module/Plugin
  • 的数据提供者Vendor/Module/DataProvider
  • 与ui组件相关的类 Vendor/Module/Ui

但请尽量避免名称重复。我的意思Vendor/Module/DataProvider/CustomDataProvider是多余的。

也许只能为接口添加后缀,尽管人们对此表示反对。

总而言之,您的操作方式取决于您如何做到一致。

从功能的角度来看,放置类的位置并不重要。您甚至可以疯狂对待它们,并将它们直接放置在Vendor/Module文件夹中,但是您可能不希望这样做。

我认为(但不能完全确定)唯一的限制是控制器必须位于folder中Controller


我同意我们会发疯,这既是好事,也有坏事,但正如您所说,这是根据我们看待事物的方式。也许当Magento的分享他们的内部技术愿景截至MagentoLive法国宣布,我们将有更多的信息,这些点感谢您分享您的意见
MatthéoGeoffray

7

我认为这是基于观点的,但是我同意在M2中有关类命名和位置方面存在一些不一致之处。

这是我想到的有关文件夹命名的列表。对我来说,应该尽可能使用这些文件夹,以使其他人更容易浏览和理解模块:

  • 控制者
  • 模型
  • 观察者
  • 设定
  • 测试
  • i
  • 等等
  • i18n
  • 视图
  • 克朗
  • 帮手
  • 安慰
  • 阿皮
  • 插入
  • 数据提供者

最重要的是,M2使用了一些非常特定的文件夹,但我没有将它们包括在此列表中:

  • 价钱
  • 应用程式
  • 客户数据
  • 服务
  • 网关
  • 档案
  • 适配器
  • 零件
  • 模板引擎

M2的好处是您可以使用和创建所需的任何文件夹。如果上面的列表中不包含某些内容,请创建您自己的文件夹并将您的类放在其中,只是要保持一致。


在您所有的答案中,我们发现了相同的想法,可以按自己的意愿做,最重要的是保持其构造的一致性和规律性。但是,Magento在向ML宣布时就此分享一些内部看法将是很棒的。正如您所说,每个人都将更容易理解Core和Community扩展。感谢您的回答。
MatthéoGeoffray

6

我认为,当务之急是使代码尽可能地自我记录。因此,与其将所有内容都放入Model或Helper目录中,不如找到一个描述其下代码功能的好名字,这是一种更好的方法。当然,这也更加困难,因为它需要更多的思考。

例如,Model/Config/Converter.php该名称不是使用,而是OrderStateMachine/TransitionsConfiguration/XmlToArrayConverter.php表示模块和类的作用。


正如您所说,需要更多的思想来使我们清楚,但也需要看到扩展名的任何人。目前,这使事情变得更困难,但随着时间的推移,效率会提高。谢谢您的回答
MatthéoGeoffray

3

上面已经有一些非常好的答案。我要补充的是,您应该避免将代码放置在下app/code,而应使用基于composer的安装方法,最终将代码放置在下vendor/


是的,不用担心,我知道,格式仅是我所问问题中的示例:)但是,对于那些不知道我会编辑清楚的人来说,您是正确的。谢谢
MatthéoGeoffray

fooman是个好点
阿米特·贝拉
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.