# distributeddatamgr_data_object
**Repository Path**: hlzhangaj/distributeddatamgr_data_object
## Basic Information
- **Project Name**: distributeddatamgr_data_object
- **Description**: 暂无描述
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://gitee.com/openharmony/distributeddatamgr_data_object
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 145
- **Created**: 2023-12-14
- **Last Updated**: 2023-12-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 分布式数据对象部件
## 简介
分布式数据对象管理框架是一款面向对象的内存数据管理框架,向应用开发者提供内存对象的创建、查询、删除、修改、订阅等基本数据对象的管理能力,同时具备分布式能力,满足超级终端场景下,相同应用多设备间的数据对象协同需求。
分布式数据对象提供JS接口,让开发者能以使用本地对象的方式使用分布式对象。分布式数据对象支持的数据类型包括数字型、字符型、布尔型等基本类型,同时也支持数组、基本类型嵌套等复杂类型。
## 约束
• 不同设备间只有相同bundleName的应用才能直接同步
• 不建议创建过多分布式对象,每个分布式对象将占用100-150KB内存
• 每个对象大小不超过500KB
• 支持JS接口间的互通,与其他语言不互通
• 如对复杂类型的数据进行修改,仅支持修改根属性,暂不支持下级属性修改
## 目录
```
//foundation/distributeddatamgr/data_object/
├── frameworks # 框架层代码
│ ├── innerkitsimpl # 内部接口实现
│ │ ├── include
│ │ ├── src
│ │ └── test # C++测试用例
│ └── jskitsimpl # JS API实现
│ ├── include
│ ├── src
│ └── test # js测试用例
├── interfaces # 接口代码
│ ├── innerkits # 内部接口声明
│ └── jskits # js接口声明
├── picture # 资源图库
└── samples # 开发实例
```
**图 1** 分布式数据对象实现图

每定义一个分布式数据对象都会创建一个分布式内存数据库,通过sessionId来标识。当对分布式数据对象进行读写操作时,实际上是对分布式数据库进行读写操作。分布式数据对象通过软总线实现数据的同步。
## 接口说明
### 引用分布式对象头文件
```js
import distributedObject from '@ohos.data.distributedDataObject'
```
### 接口
| 接口名称 | 描述 |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| function createDistributedObject(source: object): DistributedObject; | 创建分布式对象
source中指定分布式对象中的属性
返回值是创建出的分布式对象,接口见DistrubutedObject |
| function genSessionId(): string; | 随机创建sessionId
返回值是随机创建的sessionId |
### DistrubutedObject
| 接口名称 | 描述 |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| setSessionId(sessionId?: string): boolean; | 设置同步的sessionId,可信组网中有多个设备时,多个设备间的对象如果设置为同一个sessionId,就能自动同步
sessionId是不同设备间组网的标识,将sessionId设置为" "或不设置均可退出组网
返回值是操作结果,true表示设置sessionId成功 |
| on(type: 'change', callback: Callback<{ sessionId: string, fields: Array }>): void; | 监听对象数据的变更
type固定为'change'
callback是变更时触发的回调,回调参数sessionId标识变更对象的sessionId,fields标识对象变更的属性名 |
| off(type: 'change', callback?: Callback<{ sessionId: string, fields: Array } | 删除数据对象变更的监听
type固定为'change'
callback为可选参数,不设置表示删除该对象所有变更监听 |
| on(type: 'status', callback: Callback<{ sessionId: string, networkId: string, status: 'online' \| 'offline' }>): void | 监听数据对象上下线的变更
type固定为'status'
callback是变更时触发的回调,回调参数sessionId标识变更对象的sessionId,networkId标识对象设备的networkId,status标识对象为'online'(上线)或'offline'(下线)的状态 |
| off(type: 'status', callback?: Callback<{ sessionId: string, deviceId: string, status: 'online' \| 'offline' }>): void | 删除数据对象上下线变更的监听
type固定为'status'
callback为可选参数,不设置表示删除该数据对象所有上下线监听 |
| save(deviceId: string, callback: AsyncCallback<SaveSuccessResponse>): void | 持久化保存数据对象
deviceId为设备Id,用户自定义。例如"local"。
|
| revokeSave(callback: AsyncCallback): void | 撤回已保存的数据对象。callback为撤回已保存的数据对象回调。
## 开发实例
针对分布式数据对象,有以下开发实例可供参考:
[备忘录应用](https://gitee.com/openharmony/distributeddatamgr_data_object/tree/master/samples/distributedNotepad)
分布式数据对象在备忘录应用中,通过分布式数据对象框架,当用户在某一端设备上新增备忘录事件,修改编辑事件标题和内容以及清空事件列表时,产生的数据变更结果均可以同步刷新显现在可信组网内其他设备上。
## 相关仓
- [分布式数据对象开发指导](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/database/data-sync-of-distributed-data-object.md)
- [分布式数据对象API文档](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-data-distributedobject.md)
- [distributeddatamgr\_datamgr](https://gitee.com/openharmony/distributeddatamgr_datamgr)
- [third\_party\_sqlite](https://gitee.com/openharmony/third_party_sqlite)
- **[distributeddatamgr\_data\_object](https://gitee.com/openharmony/distributeddatamgr_data_object)**