C# 如何仅使用声明(接口)为应用程序建模?

C# 如何仅使用声明(接口)为应用程序建模?,c#,.net,class,coding-style,C#,.net,Class,Coding Style,在我思考了这个问题之后,这是我非常喜欢做的事情。因此,只需创建类、枚举、接口、结构等来定义编程意义上的接口 但在执行此操作时,编译器显然会抱怨,因为我周围有方法等,但里面没有代码,所以需要返回值等的方法会被标记 现在你可以说,为什么要编译呢?但对我来说,能够编译并看到您的接口正在编译是一个重要的步骤。然后,当您感到满意时,可以添加缺少的实现并测试您的更改 所以我的问题是,你会这样做吗?如果是,怎么做 你认为这种风格的优点和缺点是什么?这种编程风格也有名字吗 请注意,尽管这与其他一些更常用的编程方

在我思考了这个问题之后,这是我非常喜欢做的事情。因此,只需创建类、枚举、接口、结构等来定义编程意义上的接口

但在执行此操作时,编译器显然会抱怨,因为我周围有方法等,但里面没有代码,所以需要返回值等的方法会被标记

现在你可以说,为什么要编译呢?但对我来说,能够编译并看到您的接口正在编译是一个重要的步骤。然后,当您感到满意时,可以添加缺少的实现并测试您的更改

所以我的问题是,你会这样做吗?如果是,怎么做

你认为这种风格的优点和缺点是什么?这种编程风格也有名字吗


请注意,尽管这与其他一些更常用的编程方式(从我所看到的)不同,程序员会立即开始实现,并且当他需要更多类型时,他会立即或之后添加它们。但始终要进行实现。

您可以使用所有接口进行编译,没有问题

您可以编译使用自动属性(
{get;set;}
)和空void方法的结构和类

如果抛出异常,则可以编译具有返回值的方法。为此,抛出
NotImplementedException
。不需要
return
语句

部署时,不应出现任何
NotImplementedException
s;任何没有设计实现的成员都应该抛出
NotSupportedException


为什么? 我个人并没有试图以这种方式对整个解决方案进行建模。我通常从一个接口开始,编写测试,然后实现它。当我发现需要依赖项时,我编写接口以便在测试中模拟它们


一旦该类仅使用接口实现,我就开始为支持第一个类而必须编写的接口编写测试并实现这些接口,然后重复这个过程,直到我实现了所有内容。

这与通常所说的“模拟”非常相似。一个区别是,在模拟中,专门为测试目的创建模拟类。模拟对象甚至不尝试执行真实对象的功能。在某些情况下,它只包含足够的主体,让代码编译,以便您可以使用接口。更常见的情况是,它包含一些测试代码来验证接口(例如,检查是否满足实际接口的要求,即使它对值没有其他作用)。仅举一个非常简单的例子,mock
sqrt
例程可以简单地验证其参数>=0.0。

在VS

添加类/方法/属性时/。。。它为所有内容生成可编译的代码存根

这张漂亮的照片是额外的


这在设计(部分)模型时是可用的。您不想将其用于GUI或DAL层。

接口驱动开发?谢谢,当我查找它时,他们似乎在谈论存在于语言中的接口构造,而不是类型之间的实际关系。我的一位同事告诉我,在一般意义上使用时,接口不一定是指语言中的那些接口构造。我建议在抛出新的NotImplementedException中添加//TODO,以便该方法显示在任务面板中。(不要评论投掷!评论之前或之后!)@xanatos说得好。我使用ReSharper,默认情况下它在任务列表中方便地显示NotImpledExceptions。谢谢,但是当你说“在模拟中,一个模拟类是专门为测试目的创建的”时,你是什么意思?在我的例子中,我也创建了类,等等,但你是说实例化它们吗?@Joan Venge:对不起,我本应该更精确一些,但是的,你经常会创建模拟对象,并在测试中使用它们,以验证其他部分(和接口)是否正常工作。谢谢Henk,这是一个很好的工具,但从未使用过太多。我会试试看。顺便问一下,你知道这种款式的名字吗?这不是IDD,对吧?不,我描述的是所谓的(OO)建模。以前有一种叫做IDL的东西,但它是从(C#)代码中抽象出来的。类设计器正在做UML的一部分。