我真的不明白 dart/flutter 或任何语言的模型
I really didnt understood the models in dart/flutter or in any language
你好,我是一个 flutter 开发者,我正在用 flutter 创建一个天气应用程序,这是一次很好的体验,但我在任何教程中都不明白的一件事是,我的意思是为什么我们应该创建一个模型 class,例如:- 我们在待办事项应用程序中创建了一个 TODO 模型,或者像我没有创建模型一样考虑我的应用程序,但我对此很好,你可以看到下面我用来从 API 并在不使用模型 classes 的情况下将其设置为变量,有人可以像您向孩子解释一样向我解释,并给我一些示例或一些很棒的教程链接,谢谢。
这个想法是通过使用层来改进关注点分离。
您会看到很多 Flutter 项目都使用以下层:
- 域
- 申请
- 演示文稿
- 基础设施
您所说的模型是领域层中的实体,您可以在其中编写应用程序的业务逻辑,而不考虑其他问题,例如 UI(表示层)或持久性(基础结构层)。
看看:
模型有很多好处,在每种语言中,我不会抛出大量理论来证明这一点,我只会 post 一些 基础知识 例如,当事情变得复杂时,不使用模型就无法维护项目。
假设您正在使用地图和列表来处理 dart 中的数据,举个简单的例子,在您的天气应用程序中,假设您获取由 3 个位置组成的区域的温度。对于这些位置,您会得到一个名称和一个温度,以及该温度的单位。
所以 JSON 将是这样的:
[
{
"name": "Location 1",
"temperature": 23.1,
"unit": "C"
},
{
"name": "Location 1",
"temperature": 23.1,
"unit": "C"
},
{
"name": "Location 1",
"temperature": 23.1,
"unit": "C"
}
]
现在假设您要编写一个函数来计算该地区的平均温度。如果您不使用任何模型,您将如何做到这一点,您可能会:
double avgTemp(List<String, dynamic>> theRegions) {
double sumTemp = 0
theRegions.forEach((element) {
sum += element["temperature"] as double; //this is already dangerous
});
return sumTemp / theRegions.length;
}
到目前为止没有问题,但假设在应用程序的其他部分工作 1 个月后,您必须计算一个区域的平均温度,该区域有 3 个位置,但这次,用户提供名称,温度和单位。我知道很难想象开发人员会忘记他们一个月前写的东西,但它确实发生了,虽然你知道你有 avgTemp
功能,但你几乎没有编码,但你却错误地为用户输入创建了地图你在其中一张地图上打错了,你会写 tempeature
。我保证你至少会花 2 个小时来弄清楚为什么平均值是错误的。更糟糕的是,您一开始不会注意到。
现在,如果你有一个名为 Location
的模型,它有一个很酷的构造函数,它接受 3 个参数,你就不可能在那里打错字了。
这里的另一个安全问题:maps/arrays 通常是可变的,在某些情况下你可以通过引用传递它们,想象一下必须调试一大块代码才能看到“温度”从哪里改变了23.1 至 23.2。有了模型,你可以让它们不可变,你可以很容易地找到问题所在。
另一个原因,改变实现的速度,对于这个确切的例子,假设温度的键更改为 temp
现在你必须在代码中到处搜索并确保你更新到新密钥。有些人会争辩说你可以用键的名称创建一个静态变量,是的,这会让事情变得更容易,但我给你另一个例子,而不是键更改 json 结构更改怎么样,现在 API 将 return
[
{
"name": "Location 1",
"temperature": {
"value": 23.1,
"unit": "C"
}
}
]
在这种情况下,您将敲打桌子并开始祈祷,但如果您要使用模型反序列化 json,那么您只需更改一个地方。
这个列表可以无限期地继续下去,我想 SO 上的每个人都会找到不同的理由来解释为什么你应该使用模型。
你好,我是一个 flutter 开发者,我正在用 flutter 创建一个天气应用程序,这是一次很好的体验,但我在任何教程中都不明白的一件事是,我的意思是为什么我们应该创建一个模型 class,例如:- 我们在待办事项应用程序中创建了一个 TODO 模型,或者像我没有创建模型一样考虑我的应用程序,但我对此很好,你可以看到下面我用来从 API 并在不使用模型 classes 的情况下将其设置为变量,有人可以像您向孩子解释一样向我解释,并给我一些示例或一些很棒的教程链接,谢谢。
这个想法是通过使用层来改进关注点分离。
您会看到很多 Flutter 项目都使用以下层:
- 域
- 申请
- 演示文稿
- 基础设施
您所说的模型是领域层中的实体,您可以在其中编写应用程序的业务逻辑,而不考虑其他问题,例如 UI(表示层)或持久性(基础结构层)。
看看:
模型有很多好处,在每种语言中,我不会抛出大量理论来证明这一点,我只会 post 一些 基础知识 例如,当事情变得复杂时,不使用模型就无法维护项目。
假设您正在使用地图和列表来处理 dart 中的数据,举个简单的例子,在您的天气应用程序中,假设您获取由 3 个位置组成的区域的温度。对于这些位置,您会得到一个名称和一个温度,以及该温度的单位。 所以 JSON 将是这样的:
[
{
"name": "Location 1",
"temperature": 23.1,
"unit": "C"
},
{
"name": "Location 1",
"temperature": 23.1,
"unit": "C"
},
{
"name": "Location 1",
"temperature": 23.1,
"unit": "C"
}
]
现在假设您要编写一个函数来计算该地区的平均温度。如果您不使用任何模型,您将如何做到这一点,您可能会:
double avgTemp(List<String, dynamic>> theRegions) {
double sumTemp = 0
theRegions.forEach((element) {
sum += element["temperature"] as double; //this is already dangerous
});
return sumTemp / theRegions.length;
}
到目前为止没有问题,但假设在应用程序的其他部分工作 1 个月后,您必须计算一个区域的平均温度,该区域有 3 个位置,但这次,用户提供名称,温度和单位。我知道很难想象开发人员会忘记他们一个月前写的东西,但它确实发生了,虽然你知道你有 avgTemp
功能,但你几乎没有编码,但你却错误地为用户输入创建了地图你在其中一张地图上打错了,你会写 tempeature
。我保证你至少会花 2 个小时来弄清楚为什么平均值是错误的。更糟糕的是,您一开始不会注意到。
现在,如果你有一个名为 Location
的模型,它有一个很酷的构造函数,它接受 3 个参数,你就不可能在那里打错字了。
这里的另一个安全问题:maps/arrays 通常是可变的,在某些情况下你可以通过引用传递它们,想象一下必须调试一大块代码才能看到“温度”从哪里改变了23.1 至 23.2。有了模型,你可以让它们不可变,你可以很容易地找到问题所在。
另一个原因,改变实现的速度,对于这个确切的例子,假设温度的键更改为 temp
现在你必须在代码中到处搜索并确保你更新到新密钥。有些人会争辩说你可以用键的名称创建一个静态变量,是的,这会让事情变得更容易,但我给你另一个例子,而不是键更改 json 结构更改怎么样,现在 API 将 return
[
{
"name": "Location 1",
"temperature": {
"value": 23.1,
"unit": "C"
}
}
]
在这种情况下,您将敲打桌子并开始祈祷,但如果您要使用模型反序列化 json,那么您只需更改一个地方。
这个列表可以无限期地继续下去,我想 SO 上的每个人都会找到不同的理由来解释为什么你应该使用模型。