如何将大型Flutter应用解耦成独立的包?

问题描述 投票:0回答:1

我正在致力于将大型 Flutter 整体分解为更小的独立包,以实现更好的模块化。然而,我在这些方面遇到了挑战:

  1. 数据库: 如何在不紧密耦合的情况下跨多个包共享数据库(例如 SQLite、Hive)?

  2. 通知:
    跨独立包处理推送通知的最佳方法是什么?

  3. 导航:
    如何在不失去模块化的情况下有效管理解耦包之间的导航?

  4. 全局状态(BLoC):
    如何使用 BLoC 处理跨包的共享状态,或者每个包应该管理自己的状态?

寻找适合您的最佳实践或模式的建议。谢谢!

对于导航,我尝试为每个包创建自己的路由器,它将负责该包中的路由。 对于 GlobalState,我尝试从每个包中导出每个 BLoC 并将它们聚合到 mainApp 中,然后通过 Provider 获取实例。 但这些包仍然相互耦合。

android flutter dart mobile architecture
1个回答
0
投票

我写这个作为答案,因为它作为评论太笨拙了。

从 SO 的角度来看,您这里有 4-5 个问题,您可能想单独探索它们:)

我对 Flutter 和 Dart 一无所知,但听起来有很多与技术无关的架构和系统设计思想可以用来改善代码库的客观性质。 鉴于您的问题的高级性质,很难提供具体细节。

一些一般需要考虑的事项:

  • 代码是否按逻辑层排列? 至少将 UI/表示代码与“业务逻辑”和数据访问代码分开? 如果没有,这是一个很好的基本起点。
  • 您是否熟悉任何建筑风格,例如 Clean Architecture(仅是其中的一个示例)? 如果没有,请看一下。 Clean 谈论关注点分离,这将帮助您解决如何共享数据库等问题。
  • 您熟悉SOLID吗?

全局状态(BLoC):如何处理跨包的共享状态 使用 BLoC,还是每个包都应该管理自己的状态?

以防万一您不熟悉应用程序中的层和分层,一般来说,层内的事物可以相互通信。 我不确定在您的情况下,包是否是一层内的类的逻辑组(即内聚组) - 或者更像是垂直切片(切割跨多个层)。

如果对你来说,包==垂直切片,那么我认为通常每个包只会处理它自己的状态。 请注意,有时概念在切片/包之间共享 - 例如在数据库级别,因此可能没有一种简单干净的方式来表示某些内容位于一个包或另一个包中。 我只能说,如果您有疑问,请务实并应用KISS 原则

© www.soinside.com 2019 - 2024. All rights reserved.