Odoo Web Client 的架构经历了从使用自定义的类和 Widget 系统到采用原生的 JavaScript 类和 Owl 组件系统(Component System)的过渡。目前的代码库中同时存在这两种系统,这也是理解其架构的关键点。
**组件(Components)与 Widget 的区别:**
* **Widget (旧系统):** 指的是旧的 Odoo Widget 系统。在文档中,当提到“widget”时,指的是这种旧的组件化方式。
* **Component (新系统):** 指的是基于 Owl 组件系统的新组件。文档明确指出,在本文档中,“component”始终指代新的 Owl 组件。
**架构演进与核心概念:**
从高层次上看,Web Client 是一个单页应用(Single Page Application),它不会每次用户执行操作时都请求完整的页面。相反,它只请求所需的部分,并相应地替换或更新当前屏幕,同时管理 URL 以保持状态同步。
Web Client 的核心结构可以被简化为一个包装器,它包含:
1. **NavBar:** 导航栏。
2. **ActionContainer:** 这是一个高阶组件,用于显示当前的动作控制器(如客户端动作或特定视图)。管理动作是其工作的重要部分,动作服务(action service)会内存保存所有活动的动作堆栈(体现在面包屑中),并协调每一次变化。
3. **MainComponentsContainer:** 这是一个组件,负责显示所有注册在 `main_components` 注册表中的组件,这允许系统的其他部分扩展 Web Client。
**总结来说,** 这种过渡意味着系统正在从一个基于自定义 Widget 的模式,迁移到一个更现代、更原生的 Owl 组件系统上。开发者应尽量使用 Owl 组件进行新开发。