我喜欢将接口和实现分开的想法。但是如何分开?接口定义是否在单独的.Net程序集中?您是否有一个项目定义解决方案的所有接口?否则接口的循环依赖性存在问题吗?
答案 0 :(得分:7)
将您的域对象和接口放在一个单独的“域”程序集中 除了核心.net程序集之外,这个程序集不应该引用任何东西。
通过这种方式,您可以从域/服务模型和实施中获得清晰的分离。
编辑:
http://jeffreypalermo.com/blog/the-onion-architecture-part-1/
答案 1 :(得分:3)
我不会仅仅为了它而将接口放入单独的程序集中。但是,如果接口参与任何形式的IPC或可扩展性体系结构,那么为它们提供自己的程序集通常是有意义的。
如果你有相互引用的项目,那么是的,你需要一个单独的接口程序集,但你也应该仔细检查架构,看看是否有另一种解决方法循环依赖。
答案 2 :(得分:1)
我更喜欢在接口名称后面的子文件夹(和命名空间)中保留最常见或最简单的接口实现。
\project\ \project\IAppender.cs \project\Appender\ \project\Appender\FileAppender.cs \project\Appender\ConsoleAppender.cs
如果我将这个课程扩展到项目之外。在特殊项目中,类似地重复文件夹/命名空间。
\specialproject\ \specialproject\Appender\ \specialproject\Appender\MemoryAppender.cs
答案 3 :(得分:0)
在我正在进行的项目中,接口和相关的基类进入逻辑上在功能之间划分的程序集。这些提供程序和类的实现都在核心程序集中。我们的想法是,使用我们的API的人可以以清晰和合理的方式引用更多或者一个API dll。
较小的应用程序不需要这种分离。但是,无论我在哪里保留接口,我都会将它们保存在与任何基类相同的命名空间中。