接口类型的Code Contract类的命名约定

时间:2010-08-12 11:27:27

标签: c# .net naming-conventions code-contracts design-by-contract

我正在使用System.Diagnostics.Contracts命名空间中的Code Contracts类来定义我的对象的一些契约,我想知道其他人如何在根据基本接口定义契约时命名他们的契约类。让我用一个小例子来说明:

[ContractClass(typeof(AnimalContract))]
public interface IAnimal
{
    // definition here
}

[ContractClassFor(typeof(IAnimal))]
public class AnimalContract : IAnimal
{
    // explicit interface implementation here
}

在这个例子中,我调用了Contract Class AnimalContract,但有更好的名字吗?因为契约是根据接口定义的,所以我几乎想要命名类IAnimalContract来说明它是IAnimal接口的契约。这样,当我在解决方案资源管理器中看到两个项目时,它们在视觉上“绑定”,这有助于保持头脑中的美观和清洁。当然,合同本身不是一个界面,因此以这种方式命名它对我来说闻起来很糟糕。

在这些情况下,你们(和女士们)如何命名你们的合同类?是否有普遍接受的惯例?

2 个答案:

答案 0 :(得分:3)

Code Contracts User Manual使用IAnimalContract格式(请参阅第2.8节)和ContractForIAnimal格式(请参阅第4.1节)。因此,代码合同团队自己希望没有一种特定的风格可供您遵循。

但是,我看到最常用的IAnimalContract样式,遵循一个共同的命名约定绝对是重要的。另外,我认为能够通过查找接口类型名称来快速找到合同类比仅仅找到所有合同类更有用。

就个人而言,我将我的契约类保存在与界面完全相同的文件中,这是我很少做的事情。我认为合同是界面的一部分,应该尽可能保持接近。

答案 1 :(得分:1)

我个人习惯以'IAnimalContract'的方式命名它们。但是你的观点是,我会说它们是'ContractForIAnimal',并将它们保存在一个名为'Contracts'的文件夹中。

通过这种方式,您可以轻松找到合同,而且您的命名惯例也不会有那么难闻=)