好的项目架构,对于项目开发过程中的功能交付、维护、拓展等会有重大的影响。特别是在一些较大的项目,好的架构提高交付效率,便于维护。
架构
什么是项目架构?
应用程序架构是我们组织项目的逻辑方式,以及各种组件如何相互交互以满足业务需求。 我们希望遵循标准并轻松识别我们在代码库中开发功能所需的组件。 我们定义这些组件之间的关系和交互方式可以减少或增加我们项目的复杂性,这对团队的生产力有重大影响。
层(Layers)
层是构成架构的组件。 通过为每一层分配特定的职责来定义它们。应该保持这些层简单,同时与其他层保持隔离(isolated),便于单独的维护。
单一职责原则(Single Responsibility Principle)
单一职责是面向对象设计的 SOLID 原则之一。它告诉我们在设计功能时可以坚持的以下原则:
1、类小且功能单一。不是在一个类中包含众多的功能特色,可以参考Flutter中基础Widget
2、更好地隔离组件以进行测试。不应该模拟很多组件来测试特定的功能。
3、维护特定功能而不影响代码的其他部分。 通过解耦代码,可以减少每个块对另一个块的依赖。 这样,当进行更改时,它们对整个代码库的影响就会较小。
职责(Responsibilities)
从实际项目开发经验中总结,通常应用程序有三大职责。
1、数据层(Data layer):该层直接与数据交互,如通过API与server交互,或者通过本地数据(sqlite)API与数据库交互。
2、域层(Domain layer):该层转换或操作 API 提供的数据。
3、表示层(Presentation layer):该层呈现应用程序内容并触发修改应用程序状态的事件。
根据您选择的架构,这些组件可以有不同的名称。 在某些架构中,可能再分多层来处理这些职责的特定方面,但这些都是实现细节。 本质将保持独立于架构。
架构选择(Architectural Choices)
我们将提到在以最佳的方式构建应用程序时,哪些应该和不应该做的是事情,这样就有了构建可扩展和可维护应用的基础。注意,这是一种武断的架构方法,您可以随意实施对您和您的团队有意义的架构。
定义层(Define your layers)
正如我之前所说,您可以创建不同的层来处理应用程序中的三个主要职责。 定义层是一个关键步骤,因为您可能希望在不影响可维护性的情况下使它们尽可能简单。
非常好的架构(Very Good Architecture)
在 VGV,我们遵循一个有四层的架构。
1、数据层:这一层负责与 API 交互。
2、领域层:负责转换来自数据层的数据。
最后,我们想要管理该数据的状态并将其呈现在我们的用户界面上,这就是我们将表示层一分为二的原因:
3、业务逻辑层:该层管理状态(通常使用flutter_bloc)。
4、表示层:基于状态呈现 UI 组件。