如何理解“合同”的含义

本文关键字:合同 何理解 | 更新日期: 2023-09-27 18:08:26

我总是看到contract这个词,它似乎有不同的含义,或者至少对我来说是这样(我不是英语母语者),所以当我看到"合同"这个词时,我不能确定我应该理解和期望它是什么。我不知道其他人是否有同样的问题,但这让我很困扰。例如,当我看到"接口"时,它让我想到"抽象、依赖注入、继承等",我知道我在寻找什么,它在我的脑海中很好地形成了。

但是当涉及到单词contract时,我无法想象模式,类等,无论它是什么。它是由interfaceclassattribute等形成的吗?

例如,这里有一个类(在Json.NET中)讨论了一个叫做IContractResolver的东西,页面解释了它的用途:

IContractResolver接口提供了一种自定义方法JsonSerializer将。net对象序列化和反序列化为JSON不需要在类中添加属性

解释很容易理解,但当我看到Contract时,我不能形成这个想法,我不能说:

"嗯,我期待一些方法做这个和那个,这样我就可以重写它,然后我在这里/那里使用这个类来改变/实现一些功能等等。"

这让我很烦。我读了一些关于它的文章,但他们谈论的是契约式设计,对于那些对"合同"的含义有困难的人来说,这不是什么有用的东西。

所以谁能解释一下我应该如何理解这个术语,当我看到它的时候我应该期待什么?这将是非常好的,你可以添加一些示例代码,以便我可视化它。

如何理解“合同”的含义

在"契约式设计"中,契约是指库(类、函数)的开发人员与使用者之间的协议。

这可能是一个协议,没有人会为某个参数传递null。它可以是一个特定方法总是在少于200ms的时间内完成的协议。或者在创建对象的线程上引发事件。重要的是有一些充满规则的文档,并且调用者和函数都同意这些规则。

IContractResolver听起来像是提供了一种数据格式。这不是合同。(可能存在一个约定,约定通信的两个端点将对特定消息使用这种格式,但格式本身并不是一个完整的约定。合约还需要描述每条消息应该何时发送,等等)

合约是至少两方之间的协议。在这种情况下,. net契约非常有意义。

在契约式设计上下文中,情况类似。通过协议进行设计,您就接口和一些可验证的义务达成一致。

Contract是一个相当宽泛的术语,但有一些特定的含义。所以为了正确理解它,你应该知道上下文。一般定义是(从这里):

两个或两个以上的人或多方之间具有约束力的协议

可以就所提供的操作达成一致(部分等同于协议),如:

服务契约指定服务支持哪些操作。

或者以什么格式传递数据(这里):

数据契约是服务和客户端之间的正式协议

interface有时也被称为契约——因为它确实是:关于什么可以调用以及如何调用的具有约束力的协议。

数据驱动开发中的契约也是关于可以传递什么数据、可以返回什么数据以及对象的有效状态的协议。从本质上讲,它与第一个引语是一样的:两个不同代码段之间的绑定协议。

所以如果你不确定上下文,试着用常识。如果你不熟悉上下文,试着理解或问:

  • 在这种情况下合同定义了什么?
  • 它是如何定义的?
  • 涉及哪些方面?

合同是一个负担沉重的词,根据上下文有很多含义。

对我来说,它是双方之间的任何协议,因此它可以是。net接口意义上的接口(即类型),也可以是双方之间交换的消息的集合和序列(即协议),或者在JSON示例中是对象与其持久形式之间的映射。

有趣的是,你提到"界面"是更清晰的,因为它不一定是这样的。我不把它与抽象、依赖注入或继承(尤其是最后一个)联系起来,而是与任何类型的协议更松散地联系起来。也许原因是我开始使用的语言没有内置具有特定含义和关键字的接口(例如c++)。关键是,这也取决于环境。