我真的不懂飞镖/飞镖或任何语言的模型



你好,我是一名flutter开发人员,我正在创建一个带有flutter的天气应用程序,这是一次很好的体验,但我在任何教程中都不明白的一件事是,我的意思是为什么我们应该创建一个模型类,例如:-我们在TODO应用程序中创建一个TODO模型,或者像我没有创建模型一样考虑我的应用程序,但我对此很满意,你可以看到下面的代码,我正在使用它从API获取数据,并在不使用模型类的情况下将其设置为变量,有人可以像你向孩子解释一样向我解释吗,还可以给我一些示例或一些很棒的教程链接,谢谢。

模型有很多好处,在每种语言中,我不会用大量的理论来证明这一点,我只会发布一些基本示例,当事情变得复杂时,不使用模型根本不可能维护项目。

假设您使用地图和列表来处理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;
}

到目前为止没有问题,但假设在应用程序的其他部分工作一个月后,你必须计算一个有3个位置的区域的平均温度,但这一次,用户提供了名称、温度和单位。我知道很难想象开发人员会忘记他们一个月前写的东西,但事实确实如此,虽然你知道你有avgTemp函数,虽然你几乎没有编码,但你为用户输入创建了映射,而且你在其中一个映射中错误地输入了错别字,你会写tempeature。我保证你会加速至少2个小时,试图弄清楚为什么平均值是错误的。更糟糕的是,你一开始不会注意到。

现在,如果你有一个名为Location的模型,它有一个很酷的构造函数,可以使用3个参数,那么你就不可能在那里拼写错误。

这里的另一个安全问题是:映射/数组通常是可变的,在某些情况下,您可以通过引用传递它们,想象一下必须调试一大块代码才能查看";温度";从23.1变为23.2。有了模型,你可以使它们不可变,你可以很容易地找到问题所在

另一个原因是更改实现的速度,在这种确切的情况下,假设温度的键更改为temp,现在您必须在代码中到处搜索,并确保更新到新的键。有些人会争辩说,你可以用键的名称创建一个静态变量,是的,这会让事情变得更容易,但我给你另一个例子,而不是键的更改json结构的更改,现在API将返回

[
{
"name": "Location 1",
"temperature": {
"value": 23.1,
"unit": "C"
}
}
]

在这种情况下,您将敲击桌面并开始祈祷,但如果您要使用一个模型来反序列化json,那么您只需要在一个地方更改它。

这个列表可以无限期地继续,我想SO上的每个人都会发现你应该使用模型的不同原因。

这个想法是通过使用层来改进关注点的分离。

你会看到很多Flutter项目都使用以下层:

  • 应用程序
  • 演示文稿
  • 基础设施

您所称的模型是域层内的实体,在这里您可以对应用程序的业务逻辑进行编码,而不考虑其他问题,如UI(表示层)或持久性(基础结构层)。

看看:

  • Reso Coder Flutter TDD清洁架构课程
  • 鲍勃叔叔清洁建筑

最新更新