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

Joa*_*nge 3 .net c#

在我看来,无论何时我遇到内部呼叫或类型,就像我遇到了一个障碍.

即使它们可以像开源这样的代码访问,它仍然认为它们不是API代码本身的可用部分.也就是说它们好像不鼓励被修改.

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

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

Jar*_*Par 12

在DLL中使用不属于公共API的内部类型没有任何问题.事实上,如果你没有内部类型(或至少是非公共类型),如果除了一个普通的DLL之外还有其他任何东西,那么更有可能是糟糕设计的标志

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

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


Ree*_*sey 8

内部类型是明确意味着不在API中的类型.你应该只标记你不希望别人看到的内部事物.

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

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


And*_*are 5

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

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