0

我需要为一个特定的 MVC 会话使用两个类似的库。意味着,它们(它们的方法)不会同时使用(我将If...Else围绕该特定会话使用一次仅选择一个库的方法)。问题是:

  • 为了使这两个库都能正常工作,我的实体(模型)对extend它们的类​​是强制性的(希望我使用 C++)。

  • 他们不提供任何Interface. 所以,我不能做多继承。

我剩下的唯一选择:为两个库分别创建两个不同的模型并使用基于会话(或正在使用的库)的特定模型。

但是,它会复制模型中的代码。由于在 MVC 会话之间使用了持久存储,因此此时无需在它们之间同步数据。但是,重复代码仍然是一个令人头疼的问题。有没有办法避免这种情况?

4

2 回答 2

2

您可以为每个特定的库创建适配器。这将使您自己的代码与其他库保持干净。

此外,您应该考虑使用策略模式在两个库之间切换。当代码变得更复杂并且您可以在测试中模拟库时,这会变得很方便。

于 2013-11-12T17:00:41.600 回答
1

如果这就是您所要求的,那么您将无法绕过这两个库。您可以有几个选择,这取决于您希望事情如何工作。

据我了解,您可以创建两个类,每个类扩展一个不同的库,这些类实现一个接口,覆盖您需要的任何方法。

伪代码:

private class Lib1Adapter extends Lib1 implements LibAdapter {
   // wrapper methods call lib1 methods
}

private class Lib2Adapter extends Lib2 implements LibAdapter {
   // wrapper methods call lib2 methods
}

public interface LibAdapter {
   // method signatures for publicly accessible methods
}

public class YourModel {
   public LibAdapter la = < boolean statement > ? new Lib1Adapter() : new Lib2Adapter();
}
于 2013-11-12T17:03:17.047 回答