接口应在何处"物理地生活"?

时间:2020-03-05 18:51:44  来源:igfitidea点击:

我喜欢将接口和实现分开的想法。但是如何分开?接口定义是否在单独的.Net程序集中?我们是否有一个为解决方案定义所有接口的项目?否则,接口的循环依赖是否存在问题?

解决方案

回答

将域对象和接口放在单独的"域"程序集中。
除核心.net程序集外,该程序集不应引用任何内容。

这样,我们就可以与域/服务模型和实现完全区分开。

编辑:
http://jeffreypalermo.com/blog/the-onion-architecture-part-1/

回答

我不会仅出于此目的将接口放入单独的程序集中。但是,如果接口以任何形式的IPC或者可扩展性体系结构参与,那么通常给它们自己的组装是有意义的。

如果我们有需要互相引用的项目,那么可以,我们需要为接口使用单独的程序集,但是还应该仔细检查体系结构,以查看是否存在解决循环依赖关系的另一种方法。

回答

我更喜欢将接口的最常见或者最简单的实现方式保留在接口名称后的子文件夹(和名称空间)中。

\project\
\project\IAppender.cs
\project\Appender\
\project\Appender\FileAppender.cs
\project\Appender\ConsoleAppender.cs

如果我将此课程扩展到项目之外。在一个特殊的项目中,类似地重复文件夹/命名空间。

\specialproject\
\specialproject\Appender\
\specialproject\Appender\MemoryAppender.cs

回答

在我现在正在研究的项目中,接口和相关的基类进入程序集,这些程序集在逻辑上按功能划分。这些提供程序和类的实现位于核心程序集中。这样的想法是,使用我们的API的人可以以清晰且合乎逻辑的方式引用多个或者一个API dll。

较小的应用程序不需要这种分离。但是,无论我将接口放在何处,我都将它们与任何基类保留在相同的名称空间中。