标签: contract

如何在我的方法输入参数上放置验证约束?

以下是实现此目标的典型方法:

public void myContractualMethod(final String x, final Set<String> y) {
    if ((x == null) || (x.isEmpty())) {
        throw new IllegalArgumentException("x cannot be null or empty");
    }
    if (y == null) {
        throw new IllegalArgumentException("y cannot be null");
    }
    // Now I can actually start writing purposeful 
    //    code to accomplish the goal of this method
Run Code Online (Sandbox Code Playgroud)

我认为这个解决方案很难看.您的方法很快就会填充样板代码来检查有效的输入参数契约,从而模糊了方法的核心.

这是我想要的:

public void myContractualMethod(@NotNull @NotEmpty final String x, @NotNull final Set<String> y) {
    // Now I have a clean method body that isn't obscured …
Run Code Online (Sandbox Code Playgroud)

java validation annotations design-by-contract contract

5
推荐指数
1
解决办法
1万
查看次数

WCF单个端点地址处的大型接口

我有一个wcf服务,在单个端点地址上公开了大量的服务方法.到目前为止,所有服务方法都在单个服务合同类中实现.此服务契约类实现了多个服务契约接口.现在我想将服务契约方法的实现分成几个类,以避免契约类增长到大.我使用ServiceHost的自托管方案.ServiceHost只采用实现服务方法的单一类型的类型,因此似乎必须在此类中实现所有内容.当然,方法的肉可以分解为几个类.但是还有一种方法可以将方法分成几个类吗?

service wcf contract endpoint

5
推荐指数
1
解决办法
1522
查看次数

SRS文档与软件开发合同签订的关系(b2b)

我一直想知道SRS文件与两家公司签订的官方合同的关系(一个是软件项目,另一个是客户).

SRS文件是否必须在签订合同之前或之后签署?它是否是一份b2b关系中的两个合作伙伴可以用作合同的官方文件?

requirements specifications contract b2b

5
推荐指数
1
解决办法
1545
查看次数

在许多文件中拆分swagger定义

问题:如何跨文件拆分swagger定义?那个地区有什么可能性?问题详情如下:

我想要的例子 - 在RAML中

我确实有RAML的经验,我的工作是,例如:

/settings:
  description: |
    This resource defines application & components configuration
  get:
    is: [ includingCustomHeaders ]
    description: |
      Fetch entire configuration
    responses:
      200:
        body:
          example: !include samples/settings.json
          schema: !include schemas/settings.json
Run Code Online (Sandbox Code Playgroud)

最后两行在这里非常重要!include <filepath>- 在RAML中有- 我可以将我的整个合同拆分成许多文件,这些文件只是由RAML解析器动态包含(并且所有基于RAML的工具都使用RAML解析器).

我的好处是:

  • 我的合同更清晰,更容易维护,因为模式不是内联的
  • 但这非常重要:我可以在其他工具中重用模式文件来进行验证,模拟生成,存根,生成测试等.换句话说,这样我就可以在契约(RAML,本例)和其他工具(非RAML,非swagger,只是基于JSONschema的工具)中重用模式文件.

回到Swagger

据我所知,swagger支持$ref允许加载外部文件的关键字.但是这些文件是通过HTTP/AJAX获取的还是只是本地文件?

并且是整个规范支持还是只是一些支持它的工具,而有些工具不支持它?

我在这里发现,swagger的输入必须是一个文件.这对大型项目来说非常不方便:

  • 因为大小
  • 因为如果我想使用非招摇的东西,我就无法重用架构

或者,换句话说,我可以用摇摆乐来实现同样的目标 - 我可以用RAML - 在分割文件方面吗?

api rest contract swagger raml

5
推荐指数
1
解决办法
5563
查看次数

hashCode()只应使用equals()中使用的不可变字段的子集吗?

情况

我需要覆盖equals(),因为我建议我也hashCode()使用相同的字段覆盖该方法.然后,当我看着一个只包含一个对象的集合时,我得到了令人沮丧的结果

set.contains(object)
=> false
Run Code Online (Sandbox Code Playgroud)

set.stream().findFirst().get().equals(object)
=> true
Run Code Online (Sandbox Code Playgroud)

我现在明白了,这是由于object在添加后set再次更改其hashCode 所做的更改.contains然后查看错误的密钥,找不到object.

我对实施的要求是

  • 需要可变字段才能正确实现 equals()
  • 即使它们容易发生变化,也可以安全地使用这些对象基于散列CollectionsMaps灰尘HashSet.

这违反了惯例

是否存在使用仅用于equals()计算hashCode()而不是全部使用的字段子集的危险?

更具体而言,这将意味着:equals()使用大量的物体的领域的,而hashCode()仅使用在所使用的那些字段equals()和是不可变的.

我认为这应该没问题,因为

  • 合同是fullfilled:相等的对象会产生相同的hashCode,而相同的hashCode并不necesairly意味着对象是相同的.
  • 即使对象暴露于更改,对象的hashCode也保持不变,因此可以HashSet在这些更改之前和之后找到.

相关帖子帮助我理解了我的问题,但没有解决方法:在Java中覆盖equals和hashCode时应该考虑哪些问题?equals和hashcode的不同字段

java overriding equals hashcode contract

5
推荐指数
1
解决办法
472
查看次数

PACT .NET 消费者测试:灵活长度数组

我正在使用 pactNet 来测试一个 API,它应该返回一个灵活长度的数组。

如果我调用“myApi/items/”,它应该返回一个消费者不知道确切尺寸的项目列表。所以答案应该是这样的:

    [
        {
            "id": "1",
            "description": "foo"
        },
        {
            "id": "2",
            "description": "foo2"
        },
        {
            "id": "3",
            "description": "foo3"
        }
    ]
Run Code Online (Sandbox Code Playgroud)

或这个:

    [
        {
            "id": "4",
            "description": "foo4"
        },
        {
            "id": "2",
            "description": "foo2"
        }
    ]
Run Code Online (Sandbox Code Playgroud)

如何为此交互创建合同?

文档是在Ruby中的例子,但是我无法找到C#中的等价物。

我正在使用 pactNet 2.1.1 版。

编辑:这是一个示例,它应该是什么样子。我想知道的是如何声明主体应该包含一个长度灵活的项目数组。

[Test]
    public void GetAllItems()
    {
        //Arrange
        _mockProviderService
            .Given("There are items")
            .UponReceiving("A GET request to retrieve the items")
            .With(new ProviderServiceRequest
            {
                Method = HttpVerb.Get,
                Path = "/items/",
                Headers = new Dictionary<string, object> …
Run Code Online (Sandbox Code Playgroud)

c# contract consumer pact pact-net

5
推荐指数
1
解决办法
1319
查看次数

How do I update my free apps when Apple ask me to "Review the updated Paid Applications Schedule"?

Summary: Do I need to accept the "Paid Applications" contract from Apple on iTunesConnect to update my free apps? If not, what are the steps I should follow to update my free app?

Details:

I'm trying to update a free app. I login to iTunes Connect and Apple show me this message:

查看更新的付费申请时间表

I am the Team Agent, so I go to the 'Agreements, Tax, and Banking' section and I see:

  1. In request amendment section, I have a "Paid Applications" type …

contract ios app-store-connect

5
推荐指数
1
解决办法
5078
查看次数

如何编写python中对象属性(属性)存在的接口(合约)?

我想对某个函数的参数签定合同,以强制参数对象必须具有特定的属性。我了解python不是严格类型的语言,但是有时具有合同和接口非常有用。Python现在具有类型提示,这很好,因此我们可以这样做:

def myfunc(myparam: MyType) -> SomeType:
    myparam.myprop # this should exist
Run Code Online (Sandbox Code Playgroud)

但是,如何说MyType必须具有特定的对象属性(myprop),而又不能在运行时插入断言和引发异常?我可以用abc元类定义抽象类,该类可以用作接口。

from abc import ABC, abstractmethod
class MyInterface(ABC):
     @property
     @abstractmethod
     def myprop(self) -> int: pass
Run Code Online (Sandbox Code Playgroud)

现在在代码中的某个地方,我可以将MyType定义为:

class MyType(MyInterface):
    myprop = 8
Run Code Online (Sandbox Code Playgroud)

它正在工作,但是 myprop是类属性,而不是对象属性(属性)。我当然可以这样做:

class MyType(MyInterface):
    myprop = 0
    def __init__(self):
        self.myprop = 8
Run Code Online (Sandbox Code Playgroud)

很好,但是我必须定义一个(不必要的)类(“静态”)属性,并使用对象属性有效地将其隐藏。不太干净。而且现在我有一个myprop的默认值,这不是我想要的。但是,如果我这样做:

class MyType(MyInterface):
    myprop = None  # wrong type here
    def __init__(self):
        self.myprop = 8
Run Code Online (Sandbox Code Playgroud)

这是错误的,因为myprop 必须为 int且不能为None,这是由linter 正确捕获的。应该有一个没有类属性的对象属性。

目标是像mypy这样的静态检查器可以捕获实现错误,其中类不遵循已定义的接口或协定,而该协定或协定要求参数实例必须具有某些属性。

什么是pythonic(或不是pythonic)的实现方式?

python abstract-class interface contract python-3.x

5
推荐指数
1
解决办法
56
查看次数

如何通过合同强制客户端代码初始化Kotlin中所有必需的构建器字段?

据说在2019年的JetBrains开放日,Kotlin团队研究了合同并试图实现上下文合同,该合同仅允许在某些情况下调用函数,例如,build仅在setName方法调用前被调用了一次的情况下才允许调用函数。是一段谈话录音。

我尝试使用当前可用的Kotlin功能模拟此类合同,以为创建null安全构建器data class Person(val name: String, val age: Int)

注意:当然,在这种情况下,使用命名参数而不是生成器模式要容易得多,但是命名参数不允许将未完全构建的对象解析为其他函数,并且在创建时很难使用它们由其他复杂对象等组成的复杂对象。

所以这是我的null安全构建器实现:

基于通用标志的构建器

sealed class Flag {
    object ON : Flag()
    object OFF : Flag()
}

class PersonBuilder<NAME : Flag, AGE : Flag> private constructor() {
    var _name: String? = null
    var _age: Int? = null

    companion object {
        operator fun invoke() = PersonBuilder<OFF, OFF>()
    }
}

val PersonBuilder<ON, *>.name get() = _name!!
val PersonBuilder<*, ON>.age get() = _age!!

fun <AGE …
Run Code Online (Sandbox Code Playgroud)

generics type-inference contract kotlin

5
推荐指数
1
解决办法
91
查看次数

如何在Solana链上程序中获取随机数?

我刚刚加入 Solana 链上计划。我要做一个判断正面或背面的硬币游戏。我尝试使用 std:: rand 和 get_random 板条箱,但它们不起作用。如果您有这方面的经验,请告诉我。

我使用 Solana 链上程序的锚点。

random contract blockchain smartcontracts solana

5
推荐指数
1
解决办法
3286
查看次数