我真的不明白 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 上的每个人都会找到不同的理由来解释为什么你应该使用模型。