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

时间:2013-11-12 16:22:22

标签: java model-view-controller

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

  • 要使两个库都可以工作,我的实体(模型)必须是extend他们的类(希望我使用的是C ++)。

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

我唯一的选择:为两个库创建两个不同的模型&使用基于会话的特定模型(或使用的库)。

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

2 个答案:

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