接口是否应该与实现它们的具体类位于同一命名空间中?

发布于 2024-10-14 10:56:15 字数 1431 浏览 10 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一指流沙 2024-10-21 10:56:15

他们应该生活在对他们来说合乎逻辑的命名空间中;这意味着对于它们是否应该驻留在同一名称空间中没有明确的规则。您会发现相对抽象的命名空间通常不会与它们的实现并存,而与其实现者更加 1:1 的接口更有可能彼此并存。

一个更重要的考虑因素是保持接口可供重用——通常这意味着更多地考虑与接口一起进入程序集的内容,而不是命名空间。

They should live in the namespace that is logical for them; this means that there's no firm rule for whether or not they should reside in the same namespace. You'll find relatively abstract namespaces often don't live alongside their implementation, whereas interfaces that are more 1:1 with their implementors are more likely to remain alongside one another.

A more important consideration is to keep the interfaces consumable for reuse--normally this means more consideration given to what goes into the assembly alongside the interfaces, rather than the namespaces.

梨涡少年 2024-10-21 10:56:15

检查 Martin Fowler 在 单独接口 上的模式,它可能会帮助您决定将它们放在哪里。

Check Martin Fowler's pattern on Separate Interfaces, it might help you decide where to put them.

皇甫轩 2024-10-21 10:56:15

当然没有令人信服的理由这样做。

事实上,如果接口的用户不需要知道具体的类,如果有多个实现,如果定义接口的组与实现它的某个版本的组不同(所有这些都是有效的情况) ),那么将实现和接口命名空间分开可能是明智的。

我对 C# 不太确定,但在 Java 中,包成员身份是强制方法可见性的重要组织模式。如果您想使用包私有的东西,您基本上必须将实现类分组在同一个包中(这样您可能无法将它们与接口放在一起)。

There is certainly no compelling reason to do that.

In fact, if the users of the interface need not be aware of the concrete class, and if there are multiple implementations, and if the group defining the interface is different from the group implementing a certain version of it (all of which are valid cases), then it is probably wise to separate the implementation and interface namespaces.

I am not too sure about C#, but in Java, package membership is an important organizational pattern to enforce method visibility. If you want to make use of package-private things you basically have to group implementation classes together in the same package (so that you probably cannot put them together with the interfaces).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文