NET中的DLL混乱,如何将一个解决方案拆分为多个DLL?

NET中的DLL混乱,如何将一个解决方案拆分为多个DLL?,dll,plugins,projects-and-solutions,coupling,Dll,Plugins,Projects And Solutions,Coupling,我有一个大型VS.NET项目,有5-6个项目,其中一个项目是核心DLL 现在,为了添加一些插件支持,我提取了一个接口,但是该接口需要使用其他一些类,Core.dll需要该接口,所以我必须将它们分开。(我无法相互引用) 在这之后,我的一天毁了,因为即使花了大约4个小时,我也不能把它们分开!最后,我创建了20多个项目,但仍然不起作用(实际上甚至还没有结束)。看起来我将要完成50个项目,需要修改大量代码才能正确完成 我意识到我的代码是高度耦合的,并且是反向的 我这样做对吗?现在,我必须支付我的会费和痛

我有一个大型VS.NET项目,有5-6个项目,其中一个项目是核心DLL

现在,为了添加一些插件支持,我提取了一个接口,但是该接口需要使用其他一些类,Core.dll需要该接口,所以我必须将它们分开。(我无法相互引用)

在这之后,我的一天毁了,因为即使花了大约4个小时,我也不能把它们分开!最后,我创建了20多个项目,但仍然不起作用(实际上甚至还没有结束)。看起来我将要完成50个项目,需要修改大量代码才能正确完成

我意识到我的代码是高度耦合的,并且是反向的


我这样做对吗?现在,我必须支付我的会费和痛苦,因为我的高度耦合的代码?还是我遗漏了什么?

重构,重构,重构。你必须付你的会费,但我认为这是值得的。你会学到很多

重构,重构,重构。你必须付你的会费,但我认为这是值得的。你会学到很多

如果您使用接口,您应该能够轻松地将接口从核心DLL中拉出,并为原始接口上的任何需求提供接口

如果通过接口具有高度耦合的依赖项,则可能需要进行一些重构。尝试从主接口的依赖项中提取接口或基类(这将很容易引入新项目)。这将有助于防止循环依赖性问题,这听起来像是您现在遇到的问题


不过,总的来说,我会说,在你做这件事之前,先退一步,想想你的项目。项目布局应该更多地基于函数而不是依赖关系——如果您根据类正在做的事情清晰地对类进行分组,那么大多数依赖关系问题往往会自行清理。在您尝试提取之前,我会仔细研究重构,以获得尽可能干净的布局。

如果您使用接口,您应该能够轻松地将接口从核心DLL中拉出,并为原始接口上的任何需求提供接口

如果通过接口具有高度耦合的依赖项,则可能需要进行一些重构。尝试从主接口的依赖项中提取接口或基类(这将很容易引入新项目)。这将有助于防止循环依赖性问题,这听起来像是您现在遇到的问题


不过,总的来说,我会说,在你做这件事之前,先退一步,想想你的项目。项目布局应该更多地基于函数而不是依赖关系——如果您根据类正在做的事情清晰地对类进行分组,那么大多数依赖关系问题往往会自行清理。在您尝试提取之前,我会仔细研究重构,以获得尽可能干净的布局。

您是否考虑过使用

您是否考虑过使用

您是否已经创建了依赖关系图?Graphviz圆点可以帮助可视化(和解释)问题

您是否已经创建了依赖关系图?Graphviz圆点可以帮助可视化(和解释)问题

MEF不太可能有多大用处,除非他能解决耦合问题。此外,我不确定他是否在处理CLR——这可能是本机代码。我同意,耦合问题需要解决,但一旦有了MEF,就可以用来处理插件了……他确实说“大VS.NET项目”,我猜可能是本机代码,在他能够处理好耦合问题之前,MEF不太可能有多大用处。此外,我不确定他是否在处理CLR-这可能是本机代码。我同意,耦合问题需要解决,但一旦出现,MEF就可以用于处理插件…他说“大VS.NET项目”,我想可能是因为你分享了紧密耦合带来的痛苦。我知道这会发生,但结果比我想象的更糟。谢谢你分享了紧密耦合带来的痛苦。我知道这会发生,但结果比我想象的更糟。接口实际上救了我,基本上,我为每一个依赖项创建了接口,并进行了更多的重构,使它们变得有意义,并删除了其他依赖项。实际上,接口救了我,基本上我为每个依赖项创建了接口,并进行了更多的重构,使它们变得有意义,并删除了其他依赖项。干杯