我在这里发表的第一篇文章如此问好:)
我正在使用楼梯模式,例如我有程序集A(入口点 - 组合根),它取决于程序集B(包含接口)和程序集C,它包含程序集B中定义的接口的实现:
A - &gt; B < - C
我正在使用C#进行开发,而我正在使用Castle Windsor进行IoC。
我也在利用Windsor注册非公开类型的能力(https://github.com/castleproject/Windsor/blob/master/docs/registering-components-by-conventions.md - &gt;注册非公开类型)。我发现它很有用,因为我可以将程序集C中的类定义为内部,这意味着没有人会从A创建对C的直接依赖。这样,A和C都只依赖于程序集B,而程序集B只包含对我来说合适的抽象。
我想知道这是否是一个很好的设计选择。据我所知,只有温莎允许注册非公开类型,他们也警告不要公开非公开类型,因此我的问题。此外,我不认为这种考虑仅限于.NET世界,因此无论您使用何种技术,我都会深入了解此问题:)
答案 0 :(得分:1)
有没有理由屏蔽C类从外部访问?这只有在你让第三方使用这个程序集时才有意义(即你将它作为NuGet包发布给其他人使用)。如果这个库的唯一消费者在你自己的团队中,隐藏内部只会使事情变得复杂,因为:
另一方面,从可重用库的角度来看,使内部类很有意义。看看.NET框架本身及其内部有多少。在内部制作内容可以更轻松地更改内容而不会引入重大变化。