0

MVC の 1 つの特定のセッションに対して、2 つの同様のライブラリを使用する必要があります。つまり、それら (メソッド) は同時に使用されません (一度にIf...Else1 つのライブラリのみのメソッドを選択するために、その特定のセッションで使用します)。問題は:

  • 両方のライブラリが機能するには、エンティティ (モデル) がクラスに必須です ( extendC++ を使用していればよかったのに)。

  • 彼らは何も提供しませんInterface。したがって、多重継承はできません。

私が残した唯一の選択肢:両方のライブラリに対してそれぞれ2つの異なるモデルを作成し、セッションに基づいて特定のモデルを使用します(またはライブラリを使用しています)。

ただし、モデルのコードが複製されます。現時点では、MVC セッション間で永続ストレージが使用されるため、それらの間でデータを同期する必要はありません。それでも、コードの重複は管理の大きな頭痛の種です。これを回避する方法はありますか?

4

2 に答える 2

2

特定のライブラリーごとにアダプターを作成できます。これにより、独自のコードが他のライブラリからクリーンに保たれます。

また、両方のライブラリを切り替えるために戦略パターンを使用することを検討する必要があります。これは、コードがより複雑になり、テストでライブラリをモックできる場合に便利です。

于 2013-11-12T17:00:41.600 に答える
1

それがあなたが求めているものである場合、両方のライブラリを含めることはできません。物事をどのように機能させたいかによって、いくつかのオプションがあります。

私が理解していることから、それぞれが異なるライブラリを拡張する 2 つのクラスを作成できます。これらのクラスはインターフェイスを実装し、必要なメソッドをオーバーライドします。

擬似コード:

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 に答える