これを行いたい最も一般的な状況として、次の 2 つがあります。
- システムのその部分への変更から身を守りたい。
- 優れた単体テストを記述できるようになりたい。
たとえば、LINQ to SQL と直接やり取りするビジネス レイヤーがあるとします。将来的には、代わりに nHibernate または Entity Framework を使用する必要があります。この変更を行うと、ビジネス層に影響を与える可能性があり、これはおそらく良くありません。
代わりに、インターフェイス (IDataRepository など) にプログラムした場合は、ビジネス レイヤーを変更することなく、LINQtoSQLRepository や HibernateRepository などの具体的な実装をスワップ インおよびスワップ アウトできるはずです。 Update()、Get()、Delete() など - ただし、これらの操作が実際にどのように行われるかは気にしません。
インターフェイスへのプログラミングは、単体テストにも非常に役立ちます。速度や信頼性などのさまざまな理由から、データベース サーバーに対してテストを実行したくない場合。したがって、テスト用の double、fake、または mock の実装を渡して、データ層をテストできます。たとえば、IDataRepository を実装するテスト データがいくつかあります。これにより、DB 接続なしでビジネス レイヤーから add()、delete() などをテストできます。
これらのポイントは、アプリケーションのすべての面で一般的に優れた方法です。リポジトリ パターン、SOLID 原則、さらにはテスト駆動開発についても読むことをお勧めします。これは大規模で、場合によっては複雑な領域であり、シナリオに合わせていつ何を行う必要があるかについて詳細な回答を提供することは困難です。
これが開始に役立つことを願っています。