第 1 章:架构概览¶
多层应用¶
Odoo 采用 multitier architecture,也就是说表现层、业务逻辑和数据存储是分离的。更具体地说,它采用三层架构(图片来自 Wikipedia):
表现层由 HTML5、JavaScript 和 CSS 组合而成。逻辑层完全使用 Python 编写,而数据层仅支持将 PostgreSQL 作为 RDBMS。
根据模块的范围,Odoo 开发可以在其中任一层次进行。因此,在继续之前,如果你在这些主题上还没有达到中级水平,最好先复习一下。
要完成本教程,你需要非常基础的 HTML 知识以及中级水平的 Python。高级主题将需要你掌握其他主题的更多知识。网上有大量可免费获取的教程,由于这取决于你的背景,我们无法推荐其中某一个。
作为参考,这是官方的 Python tutorial。
注解
自 15.0 版本起,Odoo 正积极转向使用其内部自主研发的 OWL framework 作为表现层的一部分。旧版 JavaScript 框架仍受支持,但会随时间推移被弃用。这一点将在高级主题中进一步讨论。
Odoo 模块¶
服务器端和客户端扩展都以 模块 的形式打包,并可选地加载到 数据库 中。模块是针对单一用途的一组功能与数据。
Odoo 模块既可以为 Odoo 系统添加全新的业务逻辑,也可以修改和扩展现有的业务逻辑。可以创建一个模块,将你所在国家的会计规则添加到 Odoo 的通用会计支持中,而另一个模块则可以添加对公交车队实时可视化的支持。
在 Odoo 中,一切都始于模块,也终于模块。
术语:开发者将其业务功能按 Odoo 模块 分组。主要的面向用户的模块会被标记并作为 应用 对外呈现,但大多数模块并不是应用。模块 也可以称为 插件模块,Odoo 服务器查找它们的目录构成 addons_path。
模块的组成¶
一个 Odoo 模块 可以 包含若干元素:
- 业务对象
业务对象(例如发票)以 Python 类声明。得益于 ORM 层,这些类中定义的字段会自动映射到数据库列。
- 对象视图
定义界面显示
- 数据文件
声明模型数据的 XML 或 CSV 文件:
- Web 控制器
处理来自 Web 浏览器的请求
- 静态 Web 数据
Web 界面或网站所使用的图片、CSS 或 JavaScript 文件
这些元素都不是必需的。有些模块可能只添加数据文件(例如特定国家的会计配置),而另一些模块可能只添加业务对象。在本培训中,我们将创建业务对象、对象视图和数据文件。
模块结构¶
每个模块都是 模块目录 中的一个目录。模块目录通过 --addons-path 选项指定。
Odoo 模块由其 清单文件 声明。
当 Odoo 模块包含业务对象(即 Python 文件)时,它们会组织为一个 Python package,其中带有 __init__.py 文件。该文件包含模块中各个 Python 文件的导入指令。
下面是一个简化的模块目录结构:
module
├── models
│ ├── *.py
│ └── __init__.py
├── data
│ └── *.xml
├── __init__.py
└── __manifest__.py
Odoo 版本¶
Odoo 提供 two versions:Odoo 企业版(源代码授权并共享)和 Odoo 社区版(开源)。除了支持、升级等服务之外,企业版还为 Odoo 提供额外的功能。从技术角度来看,这些功能只是安装在社区版所提供的模块之上的新模块。
准备好开始了吗?现在该 编写你自己的应用 了!