2009-08-06 49 views
3

在我看来,任何时候遇到内部呼叫或类型,就像我碰到一个路障。内部类型是否妥协了良好的API设计?

即使他们是一样的开源代码访问,仍觉得他们不是API代码本身的可用部分。即就好像他们不鼓励被修改一样。

除非绝对必要,否则应该避免使用内部关键字?

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

回答

12

没有什么错在你的DLL中的内部类,是不是你的公共API的一部分。事实上,如果您有任何其他不是一个简单的DLL更容易坏的设计标志,如果你没有一个内部类(或至少非公开型)

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

想想伴随该立场出现的版本问题。字面上改变对象模型中的任何东西都是一个突破性的改变。拥有内部类型可让您在模型中拥有极大的灵活性,同时避免对消费者造成重大改变

5

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

话虽这么说,我认为,尤其是当你想从你的API返回的接口类型,不想暴露,你已经习惯了实现这些接口的具体类型的内部类型可以是非常有用的。这给了API设计者很大的灵活性。

+0

当有人想要访问一个接口时,实现的类必须实例化,否则接口类型为空。这意味着界面的使用者也必须知道具体的类/类型。如果该类是内部的,则不能从调用方实例化。所以你必须公开具体的类型!哪种方式使界面无用...... – msfanboy 2014-07-05 14:08:21

8

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

我的猜测是,你对面是内部类型来了,但会一直有价值增加的公共API。我在很多项目中看到过这个。然而,这是一个不同的问题 - 与私人类型是否应该公开一样,这也是一个问题。

在一般情况下,一个好的项目应该有内部或私有类型。他们帮助实现所需的功能集而不会使公共API膨胀。保持公共API尽可能小以提供所需的功能集是使库可用的一部分。

相关问题