最近、さらなるプロジェクトで使用するために、Allegro (電子商取引ショップ) の REST-API の Java ライブラリのコーディングを開始しました。
パラメータによるオファーの取得など、複雑さの観点から非常に難しいことに遭遇しました。
基本的に、サービス内のオファーを見つけるために使用できるクエリ パラメータが複数あります。
x 個のパラメータ (文字列などについて話しているわけではありません) を受け取り、どの引数がどのパラメータに対応するかを指定せずにそれらを処理できるユニバーサル メソッドを作成する可能性はありますか?
例:
Seller.Id (唯一の引数として)、または Seller.ID と制限を指定すると、引数の順序が台無しになります。
複数のメソッドを作成することを検討していましたが、別の引数を使用したことを述べたいと思います。メソッドはそれを受け取りますが、12 個の異なる引数とそれらの組み合わせを受け取ると、非常に混乱が生じます。
また、用語が間違っている場合はお詫び申し上げます(外国語)。
何らかのリストやマップの使用を検討したことがありますか?
– マッドプログラマー
2020 年 9 月 4 日 21:37
パブリックオファー getOffers(QueryParameters queryParameters) ここで、QueryParameters には、NULL 許容フィールドを許可するビルダーが含まれています。呼び出し元は shop.getOffers(QueryParameters.builder().phrase("foo").searchMode(SearchMode. Regular).build()); のようになります。
– マイケル
2020 年 9 月 4 日 21:39
------------------------
パラメータを個別のオブジェクトにグループ化することで、この複雑さを軽減できます。たとえば、
をグループ化できます。
SellerInfoオブジェクトへのseller.id、seller.login
SearchInfo オブジェクトへのカテゴリ、フレーズ、検索モード、オフセットおよび制限
オブジェクトをパラメータとして使用する w将来、パラメータを追加または削除する必要がある場合でも、メソッド定義を変更する必要はなく、オブジェクト内の属性を変更する必要があります。
ハッシュマップを使用することもオプションです。ただし、これにより、キーと値のペアを管理するオーバーヘッドが増加します。これは、最初のオプションで提案された追加のカスタム オブジェクトを作成したくない場合に適したオプションです。
2
ありがとう、本当に助かりました。興味深い事実として、このプロジェクトはほとんどがネストされた JSON によりオブジェクト上に作成されます。
– Kici33
2020 年 9 月 5 日 13:11
お役に立ててうれしい :) コーディングを楽しんでください
– スラジ・ミシュラ
2020 年 9 月 7 日 6:21
------------------------
この引数を属性として使用してクラス (DTO) を作成してみます。このクラスのみをメソッド (POST または PUT) の引数として置きます。 GET または DELETE には ID 番号のみを使用します...