多层架构
Odoo遵循多层架构,这意味着演示,业务逻辑和数据存储是分开的。更具体地说,它使用三层架构。
UI展示层
UI表示层是 HTML5、JavaScript 和 CSS 的组合。
应用程序的最顶层是用户界面。界面的主要功能是将任务和结果转换为用户可以理解的内容。
旧版 JavaScript 框架,Odoo15以后正在积极过渡到使用其内部开发的OWL框架作为其表示层的一部分。
逻辑层
逻辑层专门用 Python 编写,这一层协调“应用程序,处理命令,” 做出逻辑决策和评估,并执行 计算。它还在两个相邻层之间移动和处理数据。
数据层
支持 PostgreSQL 作为 RDBMS。
在这里,信息被存储和从数据库或文件系统中检索出来。然后信息被传回逻辑层进行处理,最终再传回给用户。
模块
开发人员将他们的业务功能分组到Odoo模块中。主要面向用户的模块被标记为应用程序并公开,但大多数模块都不是应用程序。 模块也可以称为插件,
服务器和客户端扩展都打包为模块,这些模块可以选择装入数据库中。模块是针对单个目的的函数和数据的集合。
根据模块的范围,Odoo开发可以在三层架构中的任何一层中完成。
Odoo中的所有内容都以模块开始和结束。
模块的组成
模块可由一种或多种不同类型要素组成:
业务对象
例如发票,被声明为 Python 类。由于 ORM 层,这些类中定义的字段会自动映射到数据库列。
对象视图
定义 UI 显示
数据文件
声明模型数据的 XML 或 CSV 文件:
configuration data (modules parametrization, security rules),
配置数据(模块参数化、安全规则)、演示数据
其它文件
Web 控制器
处理来自 Web 浏览器的请求
静态 Web 数据
Web 界面或网站使用的图像、CSS 或 JavaScript 文件
模块结构
每个模块都是模块目录中的一个目录。模块目录是使用该 --addons-path
选项指定的。
An Odoo module is declared by its manifest.
Odoo模块由其目录内的manifest清单文件声明。
当Odoo模块包含业务对象(即Python文件)时,它们被组织为带有 __init__.py
文件的Python包。此文件包含模块中各种 Python 文件的导入指令。
一个简化的模块目录结构示例:
module ├── models │ ├── *.py │ └── __init__.py ├── data │ └── *.xml ├── __init__.py └── __manifest__.py