有没有办法在这里创建模型而不复制代码



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

  • 为了使两个库都正常工作,我的实体(模型)必须extend它们的类(希望我和C++在一起)。

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

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

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

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

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

如果这是您要问的,则无法绕过包括两个库。你可以有几个选择,这取决于你希望事情如何运作。

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

伪代码:

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();
}

最新更新