在 Odoo 中重写方法时保持代码更改可维护的最佳实践

问题描述 投票:0回答:1

我一直在维护和扩展 Odoo 安装。 通常我需要重写或猴子修补某些方法(不能继承)以获得所需的结果。

您认为保持变更可维护的最佳方法是什么?

到目前为止,有两种方式将更改推送到生产中:

  1. 创建一个新模块并在单独的存储库中完全覆盖该方法 -> 将 git 存储库推送+部署到生产环境。
  2. 仅更改本地 Odoo git 存储库中所需的代码,提交 -> 推送+部署 git 存储库到生产环境。

当上游代码更改并破坏覆盖时(无论是上游发生较小更改还是主要版本升级时),问题就会出现。

在第一种情况下,如果方法签名相同,即使原始方法的内容完全更改,重写的方法也会继续被调用。

在第二种情况下,如果有重大更改,则从上游拉取时合并/变基会失败。

最后,在某些情况下,其他内部模块依赖于覆盖的方法才能正常运行。

python design-patterns odoo patch code-maintainability
1个回答
0
投票

永远不要做猴子补丁(测试除外)。始终尝试使用 if 条件调用 super 或将代码放在它后面。

请记住,堆栈跟踪是通过模块序列在 odoo 中构建的(请参阅 manizest 文件)。

我们的结构位于一个存储库中:

  • 外部插件:像OCA这样的插件
  • 内部插件:我们的定制插件。有时我们的内部插件会扩展到外部或核心/企业。
  • odoo 插件:核心+企业版。

我们的标准是:

  • 如果外部插件之一发生更改,我们会手动添加这些更改。
  • 我们的自定义具有高顺序,这意味着它们将在堆栈跟踪的顶部被考虑。

提示:CD/CI 是由一个插件“测试”制作的,该插件取决于产品上安装的插件。因此,只需标记要测试的插件,测试就会通过我们所需的设置触发。

© www.soinside.com 2019 - 2024. All rights reserved.