第一章:架构概述

多层应用程序

Odoo 遵循 多层架构,意味着演示、业务逻辑和数据存储是分开的。更具体地说,它使用了三层架构(图片来自维基百科):

三层架构

表示层是HTML5、JavaScript和CSS的组合。逻辑层完全由Python编写,而数据层仅支持PostgreSQL作为关系型数据库管理系统。

根据您的模块范围,Odoo开发可以在任何这些层中完成。因此,在继续之前,如果您在这些主题中没有中级水平,刷新一下您的记忆可能是一个好主意。

为了完成本教程,您需要具备基本的HTML知识和中级的Python水平。高级主题需要更多其他学科的知识。有很多免费的教程可以访问,因此我们无法推荐一个胜过另一个,因为这取决于您的背景。

作为参考,这是官方的 Python 教程

注解

自从15.0版本以来,Odoo正在积极过渡到使用自己内部开发的 OWL框架<https://odoo.github.io/owl/> _作为其演示层的一部分。传统的JavaScript框架仍然受支持,但将逐渐被弃用。这将在高级主题中进一步讨论。

Odoo 模块

服务器和客户端扩展都打包为 模块,可以选择性地加载到 数据库 中。模块是一组针对单一目的的函数和数据的集合。

Odoo模块可以向Odoo系统添加全新的业务逻辑,也可以修改和扩展现有的业务逻辑。一个模块可以被创建来将你国家的会计规则添加到Odoo的通用会计支持中,而另一个模块可以添加对公交车队实时可视化的支持。

Odoo 中的一切都始于模块,也以模块结束。

术语:开发人员将其业务功能分组到Odoo的 模块 中。主要面向用户的模块被标记并公开为 应用程序 ,但大多数模块不是应用程序。 模块 也可以称为 插件 ,Odoo服务器找到它们的目录形成 addons_path

模块的组成

一个Odoo模块 可以 包含多个元素:

Business objects

一个业务对象(例如发票)被声明为一个Python类。这些类中定义的字段会自动映射到数据库列,这要归功于 ORM(对象关系映射) 层。

Object views

定义用户界面显示

Data files

声明模型数据的XML或CSV文件:

Web controllers

处理来自Web浏览器的请求

静态网页数据

网站或 Web 界面使用的图像、CSS 或 JavaScript 文件

这些元素都不是必需的。有些模块可能只添加数据文件(例如特定国家的会计配置),而其他模块可能只添加业务对象。在本培训中,我们将创建业务对象、对象视图和数据文件。

模块结构

每个模块都是 模块目录 中的一个目录。通过使用 --addons-path 选项来指定模块目录。

一个Odoo模块通过其 manifest 声明。

当一个Odoo模块包含业务对象(即Python文件)时,它们被组织成一个 Python包 ,其中包含一个 __init__.py 文件。这个文件包含了模块中各种Python文件的导入指令。

这是一个简化的模块目录:

module
├── models
│   ├── *.py
│   └── __init__.py
├── data
│   └── *.xml
├── __init__.py
└── __manifest__.py

Odoo 版本

Odoo 可以分为 两个版本:Odoo Enterprise(许可和共享源代码)和 Odoo Community(开源)。除了支持和升级等服务外,企业版还为 Odoo 提供了额外的功能。从技术角度来看,这些功能只是在社区版提供的模块之上安装的新模块。

准备好了吗?在编写实际代码之前,让我们转到 下一章 来回顾一下 Odoo 的安装过程。即使 Odoo 已经在您的系统上运行,我们强烈建议您阅读本章,以确保我们在开发新应用程序时始于同一起跑线。