c# - 围绕第 3 方程序集创建包装器 - 交换和解耦

标签 c# oop loose-coupling

我有一个电子邮件组件,正在集成到我的应用程序中,正在寻找一些关于如何围绕它构建包装器的提示,以便我可以在需要时将其与另一个第三方组件交换。

我现在的做法是:

  1. 构建一个包含我需要的功能的界面。
  2. 创建一个实现该接口(interface)的类,并在该类中使用我的第 3 方组件。
  3. 此组件的任何使用都将通过接口(interface)进行,如下所示:

    IPop3 pop3 = new AcmeIncePop3Wrapper(); pop3.connect();

AcmeIncePop3Wrapper 内部将是:

   public void connect()
   {
         AcmeIncePop3 pop = new AcmeIncePop3();
         pop.connect();
   }

这是一个好方法吗?

我可能可以使用 ninject 添加另一个抽象,这样我就可以交换实现,但实际上这似乎是我所需要的,因为我不希望每天更改第 3 方程序集,只是不想让事情是如此紧密地耦合。

最佳答案

我认为你有一个很好的实现。基本上你的界面说“这就是我想要处理电子邮件的方式”,第三方组件可能会做不同的事情,但是如果你基于你的界面构建包装类,你应该能够将任何第三方组件工作到该界面中。

您可能需要注意的唯一一件事是您在哪里更新具体类。如果你经常更新它,你可以考虑使用工厂或其他东西 - 如果不是,那可能没什么大不了的。我只是在想,如果您在各处创建 new AcmeIncePop3() ,那么它仍然与该具体类紧密耦合。

关于c# - 围绕第 3 方程序集创建包装器 - 交换和解耦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1723003/

相关文章:

delphi - Delphi中的接口(interface)多态性

java - 为什么要在 Java 中编写自定义异常类

java - 与 Class.forName() 松耦合

c# - 如何将未实例化的类的函数转换为委托(delegate)?

c# - 编辑功能文件时,SpecFlow .feature.cs 文件会重复

c# - 如何使用 Linq 表达式树从 Span<T> 中获取值?

c# - 构建灵活且可重用的类层次结构

c# - 将多个子组件作为参数传递

c# - 我知道如何使用依赖注入(inject),但我认为它没有实际优势

javascript - 如何协调 Javascript 库中的 DRY 和松耦合?