【问题标题】:Best design pattern for REST api based app in flutter?Flutter 中基于 REST api 的应用程序的最佳设计模式?
【发布时间】:2023-04-03 11:04:01
【问题描述】:

你好 Flutter 大师和新手。

我浏览了很多文章、视频和资源,以了解可用于 Flutter 项目的不同类型的设计模式。

我的理解是,如果应用依赖于 Firebase 等基于流的 API,那么最好采用 BLoC 或 RxDart。 如果应用程序依赖于状态类和事件,那么最好采用带有 provider 或 MobX 的 ChangeNotifier。如果我错过了什么,请纠正我。

以前我开发了一个依赖于 REST API(带有 json 数据)的应用程序,我使用了一种更简洁的方法,只使用有状态/更少的小部件并在需要的地方管理更改。

不,我想对我的设计模式有一个可靠的想法,我可以肯定地使用它。该应用程序将仅基于 REST API,并且 API 将具有基于令牌的身份验证。登录、注册和所有 CRUD 操作都依赖于 REST API,这是我在开发中可以坚持的最佳设计模式。

很高兴它可以被解释并且我被启发了。 提前致谢。

【问题讨论】:

  • 不确定它是“最好的”设计模式,但这是我的团队正在做的事情:我们对所有 http / api 请求使用包“DIO”,这是完美的工作你可以使用令牌(我们使用 jwt)。要在应用程序中传递数据,有一种比单独使用有状态小部件更简洁的方法,并且已经将其命名为:Provider。我们使用提供者,但由于 Riverpod 是 Provider 的继任者,我会研究一下。一开始可能更难理解,但您不需要上下文来传递数据,这将为您以后节省一些麻烦。希望它有所帮助,我正确理解了这个问题
  • 非常感谢@MiroLiebschner 的慷慨评论。你确实明白我在说什么。我会调查的。

标签: flutter api rest dart


【解决方案1】:

您的问题没有正确或错误的答案。如果你问三个开发者,你可能会得到四个不同的答案。我想说你可以使用任何architecture style 或适合你的品味和要求的设计模式。

如果您为 REST API(第 1 层)创建一个抽象层,您甚至可以切换到另一种架构风格,而无需对第 1 层进行任何更改。或者反过来,如果您想将后端更改为 Firebase 或其他东西否则,您可以提供第 1 层的另一种实现,而无需对前端代码(第 2 层)进行任何更改。我将第 1 层称为“服务”。这些服务的 Dart API 不应将任何与 HTTP 协议相关的内容泄漏到第 2 层,而只能使用来自您的域或 Dart SDK 的数据类型。

在这个概念中,服务是一个接口。 Widget 只依赖于接口。使用dependency injection 将实际实现提供给Widget。只有main.dart 文件知道应该为各自的服务使用哪个实现,并相应地初始化选定的依赖注入机制。然后Widget可以使用任意state management library,必要时调用Service进行读写操作。

对于将服务依赖注入到小部件中,您可以使用例如constructor injectioninherited widgetProviderget_itglobal variables

参考文献

【讨论】:

  • 感谢 jaunt 的详细解释。我可以看到我需要学习和练习的东西很少。我认为 REST 服务的接口来自于 Android 中使用的带有改造的方法,对吗? ,
  • 不,这种设计方法受我习惯于来自 Java/Spring 的影响。
猜你喜欢
  • 2011-09-10
  • 2023-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 2014-03-07
  • 2018-10-21
相关资源
最近更新 更多