我需要为一个特定的MVC会话使用两个类似的库。意味着,它们(它们的方法)不会同时使用(我将在特定会话周围使用If...Else
来一次只选择一个库的方法)。问题是:
要使两个库都可以工作,我的实体(模型)必须是extend
他们的类(希望我使用的是C ++)。
他们不提供任何Interface
。所以,我不能做多继承。
我唯一的选择:为两个库创建两个不同的模型&使用基于会话的特定模型(或使用的库)。
但是,它会复制模型中的代码。此时,由于在MVC会话之间使用持久存储,因此无需在它们之间同步数据。但是,重复的代码仍然是一个令人头痛的问题。有没有办法避免这种情况?
答案 0 :(得分:2)
您可以为每个特定的图书馆创建Adapters。这将使您自己的代码与其他库保持清洁。
此外,您应该考虑使用Strategy Pattern在两个库之间切换。当代码变得更复杂并且您可以在测试中模拟库时,这会变得很方便。
答案 1 :(得分: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();
}