使用 Composer 在不破坏兼容性的情况下更新业务网络的指南?
Guidelines of updating business network without breaking compatibility using Composer?
因为更新业务网络可能会破坏您的 API,并且您可能无法获取旧数据。我们正在寻找关于在更新业务网络和使用 composer 进行部署之前应该注意什么的通用指南。
我们将把它包含在下周发布的文档中...
模型兼容性
简介
作曲家模型预计会随着时间的推移而改变和发展。但是,在进行模型更改时必须小心谨慎,以确保现有实例对于新模型仍然有效。
如果使用模型 M 创建的实例对于模型 M' 有效,则模型 M' 与模型 M 兼容。如果实例有效,则可以使用 Serializer
.
反序列化它们
术语
本文档通篇使用以下术语:
- Class : 资产、参与者、交易、概念或事件的结构声明
- 实例:class的一个实例,例如如果org.example.Vehicle是一个资产(class),那么org.example.Vehicle#ABC123 是 org.acme.Vehicle
的 实例
- 属性 :由 class 定义的成员(或字段),包括关系。例如 class org.example.Vehicle 可能有一个名为
model
的 属性 类型 string
.
A class(资产 SampleAsset):
```
命名空间 org.acme.sample
assetId 标识的资产 SampleAsset {
o 字符串 assetId
--> SampleParticipant 所有者
o 字符串值
}
```
class的实例:
{
"$class": "org.acme.sample.SampleAsset",
"assetId": "assetId:6463",
"owner": "resource:org.acme.sample.SampleParticipant#participantId:8091",
"value": "secret plant frequently ruler"
}
命名空间的演变
可以将新的 class 添加到命名空间,而不会破坏与现有实例的兼容性。
Classes
的进化
本部分描述了更改 class 声明及其对现有实例的属性的影响。
正在重命名
重命名 class 将破坏与 class 任何预先存在的实例的兼容性或与 class 的关系。
摘要Classes
如果将未声明为抽象的 class 更改为声明为抽象,则尝试创建该 class 的新实例将在运行时抛出错误;因此,不建议将这种更改用于广泛分布的 classes.
将声明为抽象的 class 更改为不再声明为抽象不会破坏与现有实例的兼容性。
超级classes
如果 class 是其自身的超 class,则会在加载时抛出错误。对于广泛分布的 classes,不建议在加载实例时更改 class 层次结构可能导致这种循环。
更改 class 类型的直接超级 class 不会破坏与现有实例的兼容性,前提是 class 的总超级class 集=] 类型不丢失任何属性。
如果对直接 superclass 的更改导致任何 class 分别不再是 superclass,则如果预先存在的实例与修改 class。不建议对广泛分布的 classes 进行此类更改。
Class 属性
如果 属性 被声明为 optional
或被分配 default
值。添加既不是可选的也没有默认的新属性将破坏与 class.
的任何预先存在的实例的兼容性
更改 属性 的基数(将数组 []
更改为非数组,反之亦然)将破坏与 [=114] 任何预先存在的实例的兼容性=].
从 class 中删除 属性 将破坏与任何引用此字段的现有实例的兼容性。
如果 属性 被预先存在的实例使用,则更改 属性 的类型可能会导致错误。
如果 属性 被预先存在的实例使用,则更改 属性 的验证表达式可能会导致错误。
作为关系的属性遵循与其他类型相同的规则。
枚举的演变
在枚举类型中添加或重新排序常量不会破坏与现有实例的兼容性。
如果预先存在的实例试图访问不再存在的枚举常量,则会发生错误。因此,不建议对广泛分布的枚举进行此类更改。
在所有其他方面,枚举的模型演化规则与 classes 的相同。
因为更新业务网络可能会破坏您的 API,并且您可能无法获取旧数据。我们正在寻找关于在更新业务网络和使用 composer 进行部署之前应该注意什么的通用指南。
我们将把它包含在下周发布的文档中...
模型兼容性
简介
作曲家模型预计会随着时间的推移而改变和发展。但是,在进行模型更改时必须小心谨慎,以确保现有实例对于新模型仍然有效。
如果使用模型 M 创建的实例对于模型 M' 有效,则模型 M' 与模型 M 兼容。如果实例有效,则可以使用 Serializer
.
术语
本文档通篇使用以下术语:
- Class : 资产、参与者、交易、概念或事件的结构声明
- 实例:class的一个实例,例如如果org.example.Vehicle是一个资产(class),那么org.example.Vehicle#ABC123 是 org.acme.Vehicle 的 实例
- 属性 :由 class 定义的成员(或字段),包括关系。例如 class org.example.Vehicle 可能有一个名为
model
的 属性 类型string
.
A class(资产 SampleAsset):
``` 命名空间 org.acme.sample
assetId 标识的资产 SampleAsset { o 字符串 assetId --> SampleParticipant 所有者 o 字符串值 } ```
class的实例:
{
"$class": "org.acme.sample.SampleAsset",
"assetId": "assetId:6463",
"owner": "resource:org.acme.sample.SampleParticipant#participantId:8091",
"value": "secret plant frequently ruler"
}
命名空间的演变
可以将新的 class 添加到命名空间,而不会破坏与现有实例的兼容性。
Classes
的进化本部分描述了更改 class 声明及其对现有实例的属性的影响。
正在重命名
重命名 class 将破坏与 class 任何预先存在的实例的兼容性或与 class 的关系。
摘要Classes
如果将未声明为抽象的 class 更改为声明为抽象,则尝试创建该 class 的新实例将在运行时抛出错误;因此,不建议将这种更改用于广泛分布的 classes.
将声明为抽象的 class 更改为不再声明为抽象不会破坏与现有实例的兼容性。
超级classes
如果 class 是其自身的超 class,则会在加载时抛出错误。对于广泛分布的 classes,不建议在加载实例时更改 class 层次结构可能导致这种循环。
更改 class 类型的直接超级 class 不会破坏与现有实例的兼容性,前提是 class 的总超级class 集=] 类型不丢失任何属性。
如果对直接 superclass 的更改导致任何 class 分别不再是 superclass,则如果预先存在的实例与修改 class。不建议对广泛分布的 classes 进行此类更改。
Class 属性
如果 属性 被声明为 optional
或被分配 default
值。添加既不是可选的也没有默认的新属性将破坏与 class.
更改 属性 的基数(将数组 []
更改为非数组,反之亦然)将破坏与 [=114] 任何预先存在的实例的兼容性=].
从 class 中删除 属性 将破坏与任何引用此字段的现有实例的兼容性。
如果 属性 被预先存在的实例使用,则更改 属性 的类型可能会导致错误。
如果 属性 被预先存在的实例使用,则更改 属性 的验证表达式可能会导致错误。
作为关系的属性遵循与其他类型相同的规则。
枚举的演变
在枚举类型中添加或重新排序常量不会破坏与现有实例的兼容性。
如果预先存在的实例试图访问不再存在的枚举常量,则会发生错误。因此,不建议对广泛分布的枚举进行此类更改。
在所有其他方面,枚举的模型演化规则与 classes 的相同。