合约

未匹配的标注
本文档最新版为 4.0,旧版本可能放弃维护,推荐阅读最新版!

合约

简介

在创建驱动程序时使用合约,以确保它们符合 Masonite 要求。它们是其他语言中的一种接口形式,其中子类需要具有该驱动程序工作所需的最少数量的方法。它是对类的承诺,它具有所需的确切方法。

合约被设计为遵循 「面向接口,而不是面向实现编程」的规则。遵循此规则时,所有相同类型的驱动程序都是可交换的。

驱动程序旨在轻松切换指定特性的功能,例如从文件系统存储切换到 Amazon S3 存储,而无需更改任何代码。因为从技术上讲,人们创建的每个驱动程序都可以拥有他们想要的任何方法,这就产生了一个技术挑战,即必须更改任何使用不支持特定方法的驱动程序的代码。例如,一个驱动程序没有 store 方法,而其他驱动程序有,当开发人员切换驱动程序时会抛出错误。

合约确保所有相似类型的驱动程序 (如 upload、queue 和 mail) 都包含相同的方法。虽然从合约继承的驱动程序可以拥有比所需的更多的方法,但它们不应该这么做。

如果您的驱动程序需要合约中现在可以使用的其他方法,则您的文档应该以某种明显的方式列出该警告。这意味着开发人员使用该新方法时,他们将无法自由切换到其他驱动程序,而不会遇到异常或必须手动使用驱动程序使用的方法。

因此,建议不要在驱动程序上编写其他方法,而应遵守基类和合约提供的方法。

入门

合约当前用于创建驱动程序,位于 masonite.contracts 命名空间中。创建驱动程序并使用协定如下:

from masonite.contracts import UploadContract

class UploadGoogleDriver(UploadContract):
    pass

现在,此类将不断抛出异常,直到它覆盖了该类中所有必需的方法。

解析合约

如果您想 「编写接口代码而不是实现代码」,那么它很有用。这种类型的编程范例使您的代码非常易于维护,因为您可以简单地交换容器中具有相同合约的类。

例如,根据您尝试解析的驱动程序类型,Masonite 有特定的管理器合约。如果我们试图获取上传驱动程序的管理器,我们可以通过相应的上传管理器解析该管理器:

from masonite.contracts import UploadManagerContract

def show(self, upload: UploadManagerContract):
    upload.store(..)
    upload.driver('s3').store(..)

请注意,这只是返回用于上传的特定上传管理器。现在,上传管理器不是「具体」的实现,而是可以互换的。您可以在容器中加载 UploadManagerContract 的任何实例,Masonite 会为您获取它。

合约

创建驱动程序时,需要几个合约。如果您觉得需要一种用于新功能的新型驱动程序,则应首先创建合约,然后面向合约编程,而不是实现。以下是可用的合约类型。所有合约都与其驱动程序相对应。因此,需要 UploadContract 来创建上传驱动程序。

BroadcastContract

BroadcastManagerContract

CacheContract

CacheManagerContract

MailContract

MailManagerContract

QueueContract

QueueManagerContract

UploadContract

UploadManagerContract

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/masonite/2.3/ma...

译文地址:https://learnku.com/docs/masonite/2.3/ma...

上一篇 下一篇
贡献者:2
讨论数量: 0
发起讨论 只看当前版本


暂无话题~