繁体   English   中英

有没有一种方法可以在这里创建Model而无需复制代码?

[英]Is there a way to create Model here without duplicating the code?

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

  • 为了使这两个库都能工作,我的实体(模型)必须extend它们的类(这是我使用C ++的前提)。

  • 他们不提供任何Interface 因此,我无法进行多重继承。

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

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

您可以为每个特定的libraray创建适配器 这样可以使您自己的代码与其他库保持一致。

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

如果您要的是,您将无法同时包含两个库。 您可能有一些选择,仅取决于您希望事情如何工作。

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

伪代码:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM