# 模块开发

在 Bundle 内创建模块定义，创建不可变模块版本并由 Bundle 统一发布。

模块是 Bundle 中的运行时能力单元。源码项目可以独立创建，但模块定义必须在明确的
Bundle 下创建。模块版本由 Bundle 精确引用，不单独发布、审核、上架或安装。

## 开发对象

| 对象                                                                                                      | 交付物                                           | 发布方式                       |
| ------------------------------------------------------------------------------------------------------- | --------------------------------------------- | -------------------------- |
| [模块定义](/development/bundle-development/module-development/module-definition/)                           | 项目 Git 快照、`module.json`、`methods/*.json`      | 在 Bundle 内创建不可变模块版本        |
| [模块事件与发布机制](/development/bundle-development/module-development/event-development/)                      | 事件声明、Runtime 发布方法和受控回调能力                      | 由 Bundle 安装物化到目标 Runtime   |
| [ServiceReference 声明、绑定与运行时交付](/development/bundle-development/module-development/service-reference/)   | `Interface` 属性、模块属性绑定、引用授权和按需凭据领取             | 支持独立模块后端调用同一 Runtime 的目标方法 |
| [InterfaceMap 与 ServiceReferenceMap](/development/bundle-development/module-development/interface-map/) | `InterfaceMap` 属性、具名服务映射和递归展开                 | 通过稳定业务键绑定并选择多个同接口目标服务      |
| [模块调用上下文](/development/bundle-development/module-development/runtime-context/)                          | Runtime、调用方、用户和请求的可信上下文字段                     | 在方法定义中显式映射到后端请求            |
| [Runtime 用户委托](/development/bundle-development/module-development/actor-delegation/)                    | 请求级 Actor assertion、ServiceReference 双凭据与按跳轮换 | 让外部模块后端代表当前已验证用户调用下游方法     |

模块需要保存数据时，可以使用 Runtime 提供的数据能力或调用独立后端；连接已有外部系统
时，也可以让用户填写租户编号和凭据。这些场景本身不要求开发生命周期插件。
独立模块后端跨模块调用使用已公开的模块属性绑定、新插件的按需引用访问解析和 Runtime 网关 HTTP 协议，完整方式见
[模块服务间调用协议](/development/bundle-development/module-development/service-to-service-calls/)。

如果还没有确定模块是否需要外部服务，或者需要理解模块如何由 Bundle 自动安装，请先阅读
[模块开发与 Bundle 自动安装](/development/bundle-development/module-development/from-private-to-market/)。

## 组合交付

```text
独立模块源码项目
  -> 在 Bundle 内创建模块定义
  -> 创建不可变模块版本
  -> Bundle Manifest
  -> 创建 Bundle Version
  -> 审核和发布 Bundle
  -> 安装到工作区 Runtime
```

模块有独立外部后端并需要接收运行时服务引用时，使用当前模块生命周期协议；只有整个 Bundle 需要自动创建、
迁移或回收跨模块外部资源时，才转入[高级 Bundle 开发](/development/bundle-development/advanced/)。

继续阅读：

1. [模块定义开发](/development/bundle-development/module-development/module-definition/)
2. [模块事件与发布机制](/development/bundle-development/module-development/event-development/)
3. [ServiceReference 声明、绑定与运行时交付](/development/bundle-development/module-development/service-reference/)
4. [InterfaceMap 与 ServiceReferenceMap](/development/bundle-development/module-development/interface-map/)
5. [Runtime 用户委托](/development/bundle-development/module-development/actor-delegation/)
6. [模块调用上下文](/development/bundle-development/module-development/runtime-context/)
7. [模块冻结与 Bundle 交付](/development/bundle-development/module-development/publish-and-install/)
