私は最近、データ ストアの実装をラップする API を設計し、他の開発者がこの API を使用してデータにインデックスを付け、キーワードに基づいてデータベースをクエリできるようにしました。Jaroslav Tulach が、パラメーターを追加する必要があるときに API インターフェイスを変更し続けることを回避できると述べたため、クエリ メソッドで Response/Reply パターンを使用していました (Practical API Design の 97 ページ)。他の開発者は、メソッドのオーバーロードを使用する方が優れたアプローチであると主張しています。設計で 2 つの異なるアプローチを使用した経験を共有できますか? 以下は、私と他の開発者との会話です。
私: API の進化に伴い、より多くのパラメーターを API インターフェイスに追加できるため、応答/応答パターンはクリーンな方法のように見えます。インターフェイスに 10 以上のオーバーロード メソッドがあると、他の開発者が混乱する可能性があります。彼らはどの方法を使用するかをどのように判断しますか?
別の開発者の主張: API の進化に伴い、パラメーターを追加し続けるべきではありません。API インターフェイスにパラメーターを追加し続ける場合は、API 設計に問題があります。その結果、オーバーロードするメソッドの数が少なくなり、開発者が煩わしくなることはありません。また、Java フレームワークでは、多数のオーバーロード メソッドの実装がよく見られます。
私: 以前のバージョンの API との後方互換性を簡単に管理できます。インターフェイスを変更する必要はありません。インターフェイスを変更すると、他の開発者の既存のコードが壊れます。
他の開発者の主張: 実装を変更して引数を追加すると、他の開発者は新しい API に基づいてコードを更新する必要があります。新しい引数がオプションの場合、わざわざ追加する必要はありません。