Flutter的领域驱动设计设置

394 阅读4分钟

Flutter的领域驱动设计设置

在您的Flutter代码库中开始使用领域驱动设计

Fred Grott

[

Fred Grott

](fredgrott.medium.com/?source=pos…)

[

1 天前-4

](betterprogramming.pub/domain-driv…

这是一个关于Flutter的领域驱动设计的设置实例。我使用Flutter的骨架应用来保持简单。让我们开始吧。

核心或领域驱动设计

领域驱动设计的核心概念是使用价值对象作为其原子单元,与组件和层进行通信。这一次,我们要创建一个非常简单的值对象。

你会注意到,我们把它标记为不可变的,而且它使用了一个Equatable混合元素。因此,当我们把它作为一个基类时,那也往往是一个值对象。

首先,让我们来实现它。

现在让我们把它扩展成一个Model

然后是SampleItemModel 的实现。

现在让我们看看我们如何测试它。

我正在使用mocktail进行模拟,但是mockito 也有相同的基本API,这里是模拟。

还有Model 的模拟。

然后测试将是。

现在,请记住,这是一个只有listview模型而没有用户输入的骨架应用。

也没有访问任何非本地API的逻辑。因此,剩下的就是一个数据源,一个一次性使用的案例,以及列表视图模型。所以让我们来添加这个。

完成这个例子

让我们从实现列表视图模型开始。

而单元测试将是这样的。

现在我们需要为这个列表视图模型提供一个数据源。

对于数据源、存储库和用例的接口,我们使用Dartz 包。

现在,让我来谈一谈错误和异常。现在让我问一下,为什么我在这里不使用异常?有两个关键原因。

第一,任何时候抛出一个错误,它都会给出堆栈跟踪。

第二,很明显,我们正在映射我们的领域层,以便我们不抛出应用程序停止的异常。因此,我需要使用一个Error ,而不是一个异常类。

因此,数据源的单元测试是。

mock:

和单元测试。

最后我们有一个用例。

该接口。

和具体的实现。

而单元测试是。

推进

现在,我确实忽略了如何连接视图模型,但如果你遵循设置视图与服务组件和控制器的模式,就很容易添加。但是缺少什么呢?

我保持简单,没有添加DDD的其他部分,即价值对象机制和事件调度的其余部分。

其他的价值对象机制与改变实体到ValueObject(Types) 、设置验证器和其他集成有关。然后将其扩展为事件状态价值对象,并为用例、数据源、Repo和视图模型创建事件调度器。

简而言之,状态管理布线。相比之下,在Flutter的Clean Arch中,一般来说,人们只需使用BLoC或利用Redux对视图模型进行状态管理。

结论

这就是领域驱动设计的一些核心内容,可以开始了。接下来是创建更复杂的值对象和创建事件调度。示例代码可以在这个 repo 中找到。

[

GitHub - fredgrott/equatable_ddd_modeling: 使用 equatable 和 ddd 的 Flutter 演示项目

一个Flutter演示项目,展示了如何使用Equatable值对象作为接口和实现之间的胶水。

github.com

](github.com/fredgrott/e…)

我所贡献的一些Flutter社区插件是。

Want to Connect?

资源

一些有用的资源(书籍链接是指档案馆的免费pdf和书籍借阅)。