内部类型是否会影响良好的API设计?

时间:2009-08-06 18:04:04

标签: c# .net

在我看来,无论何时我遇到内部电话或类型,就像我遇到了路障。

即使它们可以在开源等代码中访问,但仍然认为它们不是API代码本身的可用部分。即好像不鼓励修改它们。

除非绝对必要,否则是否应该让自己不使用内部关键字?

我问这是一个开源API。但仍然不是每个人都想要更改API,但主要是用它来为应用程序本身编写自己的代码。

3 个答案:

答案 0 :(得分:12)

在DLL中使用不属于公共API的内部类型没有任何问题。事实上,如果你没有内部类型(或至少是非公共类型),如果你有一个除了一个简单的DLL以外的任何东西更可能是一个糟糕的设计的迹象

为什么呢?公共API是一种公开您希望消费者使用的对象模型部分的方法。拥有完全公共类型的API意味着您希望消费者在DLL中看到字面上的所有内容。

想一想这种立场带来的版本问题。在字面上改变对象模型中的任何内容都是一个重大变化。拥有内部类型可以让您在模型中获得极大的灵活性,同时避免对您的消费者进

答案 1 :(得分:8)

内部类型是明确表示不在API之外的类型。你应该只标记你不希望别人看到的内部事物。

我的猜测是你遇到了内部的类型,但它们对公共API来说是有价值的补充。我在很多项目中都看到了这一点。然而,这是一个不同的问题 - 它与私人类型是否应该是公开的实际上是同一个问题。

一般来说,一个好的项目应该有内部或私人类型。它们有助于实现所需的功能集,而不会使公共API膨胀。保持公共API尽可能小以提供所需的功能集是使库可用的部分原因。

答案 2 :(得分:5)

API由其公共类型和成员组成,其他任何内容都是实现细节。

话虽这么说,我认为内部类型非常有用,尤其是当您想要从API返回接口类型并且不希望公开用于实现这些接口的具体类型时。这为API设计人员提供了很大的灵活性。