如何在生产中的 Flutter 应用程序中更改数据模型?
How to make a data model change in a Flutter app in production?
我正在使用 Flutter 开发我的第一个移动应用程序,但我有疑问。
假设应用收到这样的 JSON:
{
"_id": "123",
"name": "X",
}
要接收和发送它,将创建以下模型:
class User {
String id;
String name;
User({
this.id,
this.name
});
factory User.fromJson(Map<String, dynamic> json) => User(
id: json["_id"],
name: json["name"]
);
Map<String, dynamic> toJson() => {
"_id": id,
"name": name
};
}
现在出于某种原因,我需要将该数据的模型结构更改为,例如:
{
"id": "123",
"info": {
"name":"X",
"age":"20"
}
}
数据库中存在旧结构存储的对象,当应用程序接收它们时,会出现错误,因为新模型与旧数据不匹配。
如果应用已经在生产中,在不影响用户的情况下避免此错误的最常见方法是什么?
有无数的版本控制思想和框架,但基础知识是:
- 将您的数据更新到新模型
- 创建第二个端点,将新数据模型传送到您的应用程序
- 保留旧的端点,从新的数据结构读取,所以旧的应用程序仍然可以工作!
- 创建一个应用程序更新,您可以在其中与新端点对话并使新数据结构可用
- 当您确定有足够多的用户进行了更新(可能是“从不”)时删除旧的终点
或:
- 更改后端
- 更改前端
- 同时部署它们并强制用户更新
第一个对用户更友好并且更容易处理,因为您可以异步工作和部署。例如,您可以先部署新后端,同时等待应用商店批准新应用。
我正在使用 Flutter 开发我的第一个移动应用程序,但我有疑问。
假设应用收到这样的 JSON:
{
"_id": "123",
"name": "X",
}
要接收和发送它,将创建以下模型:
class User {
String id;
String name;
User({
this.id,
this.name
});
factory User.fromJson(Map<String, dynamic> json) => User(
id: json["_id"],
name: json["name"]
);
Map<String, dynamic> toJson() => {
"_id": id,
"name": name
};
}
现在出于某种原因,我需要将该数据的模型结构更改为,例如:
{
"id": "123",
"info": {
"name":"X",
"age":"20"
}
}
数据库中存在旧结构存储的对象,当应用程序接收它们时,会出现错误,因为新模型与旧数据不匹配。
如果应用已经在生产中,在不影响用户的情况下避免此错误的最常见方法是什么?
有无数的版本控制思想和框架,但基础知识是:
- 将您的数据更新到新模型
- 创建第二个端点,将新数据模型传送到您的应用程序
- 保留旧的端点,从新的数据结构读取,所以旧的应用程序仍然可以工作!
- 创建一个应用程序更新,您可以在其中与新端点对话并使新数据结构可用
- 当您确定有足够多的用户进行了更新(可能是“从不”)时删除旧的终点
或:
- 更改后端
- 更改前端
- 同时部署它们并强制用户更新
第一个对用户更友好并且更容易处理,因为您可以异步工作和部署。例如,您可以先部署新后端,同时等待应用商店批准新应用。