私は現在、いくつかのレベルの抽象化を備えたソフトウェアの設計に取り組んでいます。これは私がこれまでに設計し始めた中で最も複雑なコードであり、簡単にアップグレードする必要があるため、コーディングを開始する前に、正しい方向に進んでいることを確認したいと思います。
基本的に、クラスには3つの主要なレベルがあります。これらの2つのクラスは互いに話す必要があります。
1つ目は入力ソースデータです。現在、入力データには2つの主要なタイプがあり、類似しているが同一ではない出力を生成します。これらのクラスの主な目標は、2つの異なるソースからデータを取得し、それをプログラムの残りの部分で使用するための共通のインターフェースに変換することです。
2番目のセットは、外部ライブラリ用のアダプタになります。ライブラリは定期的に更新されており、何年にもわたって更新されないのではないかと疑う理由はありません。ほとんどの場合、各アップグレードは前のアップグレードと非常に似ていますが、新しいライブラリバージョンをサポートするためにいくつかの小さな変更が加えられている可能性があります。このレベルは、入力を取得し、出力クラスを使用するためにそれらをフォーマットする役割を果たします。
最後のクラスは出力です。これには複数のバージョンが必要になるとは思いませんが、少なくとも2つの異なる出力ディレクトリを指定する必要があります。最も簡単な方法は、出力クラスの作成時に出力ディレクトリを渡すことだと思います。これが、必要な抽象化の唯一のレベルです。このクラスは頻繁に更新されますが、複数のバージョンをサポートする必要はありません。