X(Twitter) Zenn GitHub RSS 共有

3rd partyライブラリはラップする

作成日時:2024-09-22
更新日時:2024-09-22

前提

仮にCSVを読み込む処理を実装したいとする。
そこで適当なライブラリを使用して、読み込み処理を実装したとする。

愚直に実装

// 色々な場所でサードパーティーのライブラリを使用している。

void methodA() {
  var reader = new ThirdPartyCsvReader();
  Data data = reader.read(file);
  // データ加工処理
}

void methodB() {
  var reader = new ThirdPartyCsvReader();
  Data data = reader.read(file);
  // データ加工処理
}
// methodC, methodD...

この実装において、仮にライブラリを変更したい場合だったり、読み込み処理を一部変更したい場合が発生したとする。
その場合、ライブラリを使用している箇所を全て修正しなければならない。
著しく変更容易性に欠ける。

修正

ライブラリをラップするクラスを作成し、そのクラスを使用してライブラリを利用する。

// サードパーティーのライブラリを使用しているのはラッパークラスのみ
// CSVを読み込みたい場合はラッパークラスを使用し、CSVを読み込む。

class CsvReader {
  public static Data read(File file) {
    var reader = new ThirdPartyCsvReader();
    return reader.read(file);
  }
}

void methodA() {
  Data data = CsvReader.read(file);
  // データ加工処理
}

void methodB() {
  Data data = CsvReader.read(file);
  // データ加工処理
}
// methodC, methodD...

ライブラリを変更したい場合だったり、読み込み処理を一部変更したい場合は、
CsvReaderだけを修正すればよい。
※Wrapperパターン