订单添加到数据
因此,根据 原理,我们将低级模块封装在抽象中,这两个模块都应该依赖于它。 的第二个原则是这种抽象不应该依赖于细节,即不应该依赖于实现细节。 通过应用这两个规则,我们的代码在基础设施等层中变得非常灵活,因为我们可以自由地交换抽象的实现,而不会对我们的高层代码产生太大影响。 使用示例 作为使用 的示例,我们采用一个简化模型,即用户向在线商店添加订单,然后发送有关其创建的通知。首先,让我们定义模型的类。 用户模型如下所示,包含用户的基本信息,例如姓名、电子邮件和电话号码: 然后实现订单模型 为了简单起见,我们的订单只有订单号、订单价值和订单所属的用户字段。这三个字段足以提供示例。 下一步是实现一个服务,负责将我们的 C级联系人列表 库中,在我们的示例中,它将是一个 数据库。最初,此类服务的实现可能如下所示: 这样的服务可以正常工作,但它有一个基本问题:如果我们假设 是我们的高级域服务,那么在此实现中,它直接依赖于将记录保存在数据库中的低级实现。
https://static.wixstatic.com/media/79f9bb_1d4d6f216c7047acaabb94991cb0ab7c~mv2.jpg/v1/fill/w_700,h_340,al_c,lg_1,q_80,enc_auto/79f9bb_1d4d6f216c7047acaabb94991cb0ab7c~mv2.jpg
根据 假设,高级服务不应直接依赖于写入数据库的低级实现。如何解决这个问题呢?我们需要将数据库条目与抽象分离,以便领域服务依赖于它而不是特定的实现。因此,让我们首先实现负责将订单添加到数据模型的抽象: 然后,让我们创建此抽象的实现,其中将包含特定的实现解决方案,即在我们的示例中,插入到数据库中。 最后,让我们将接口注入到 中: 现在 不知道它使用的 的实现是什么以及写入数据存储的方法是什么,因为它只直接依赖于抽象。
頁:
[1]