私は現在、アプリケーションの大きな部分をリファクタリングするのに忙しいです。主な目的は、異なるモジュール間の依存関係を可能な限り取り除くことです。私は今、次の問題に遭遇しました:
私のアプリケーションには、インターフェイス IDataProvider を定義した GUI モジュールがあります。インターフェイスはアプリケーションによって実装される必要があり、GUI モジュールに「データを提供する」ために使用されます。たとえば、データ グリッドにこの IDataProvider を指定し、それを使用して、データ グリッドに表示する必要があるすべてのインスタンスをループし、それらのデータを取得できます。
今度は別のモジュール (実際にはもっと多くのモジュール) があり、それらはすべて似たようなもの (レポート モジュール、データベース統合モジュール、数学ソルバー モジュールなど) を必要とします。現時点で、私にできることが 2 つあります。
- IDataProvider を GUI レイヤーからはるかに下位のレイヤーに移動し、他のすべてのモジュールでこの同じインターフェイスを再利用できます。
- これには、アプリケーションがすべてのモジュールを簡単に使用できるという利点があります (データ プロバイダーを 1 回実装するだけで済みます)。
- 欠点は、モジュールと中央の IDataProvider の間に依存関係を導入することです。誰かが 1 つのモジュールに必要な追加のメソッドで IDataProvider を拡張し始めると、他のモジュールも汚染し始めます。
- もう 1 つの方法は、すべてのモジュールに独自のデータ プロバイダーを提供し、すべてのモジュールを使用する必要がある場合は、アプリケーションにすべてのデータ プロバイダーを強制的に実装させることです。
- 利点は、モジュールが共通部分に依存していないことです
- 欠点は、IGridDataProvider、IReportDataProvider、IDatabaseDataProvider、ISolverDataProvider になってしまうことです。
使用するための最良のアプローチは何ですか? [ほとんどまたは完全に] 同じ種類のインターフェイスが必要な場合、すべてのモジュールを同じ共通インターフェイスに依存させることは許容されますか?
同じ IDataProvider インターフェイスを使用すると、将来厄介な問題が発生する可能性がありますか (現時点では認識していません)。