拡張検索APIの最適化プロセス
4308 ワード
概要
APIはサービスの顔で、服が人のイメージのようです.
優雅なAPI設計は、業務側がより快適に使用でき、開発効率を向上させ、メンテナンスコストを低減することができる.悪いAPI設計は、ビジネス側を混乱させます.
本稿では,拡張検索APIの最適化プロセスを示し,そこからいくつかのことを学ぶことができる.
現状
上流プロジェクトの拡張検索コードを探して以下のようにします.
extendKeywords.add((EsCondition) ConditionFactory.in("order_tags", Arrays.asList("IS_XXX_ORDER")));
extendKeywords.add(new EsCondition("goods_title", Op.match, new Match(goodsTitle, "100%")));
ああ、醜いですね.どうしてですか.
emmm... 実は私が設計したAPIが作った罪です!ベルを解くにはベルを結ぶ人が必要だ.
最適化プロセス
プラントメソッド
この硬いnew EsConditonは,工場法と方法の再負荷によって完全に除去できる.さらに,拡張探索条件の構築を収束させるために,専門的なExtendSearchParamを構築することができる.
public class ExtendSearchParam implements Serializable {
private static final long serialVersionUID = 2824767430430079287L;
private List extendConditions = new ArrayList<>();
public ExtendSearchParam addEq(String field, Object value) {
extendConditions.add(new EsCondition(field, Op.eq, value));
return this;
}
public ExtendSearchParam addIn(String field, Object... list) {
extendConditions.add(new EsCondition(field, Op.in, list));
return this;
}
public ExtendSearchParam addRange(String field, long gte, long lte) {
extendConditions.add(new EsCondition(field, Op.range, new Range(gte, lte)));
return this;
}
public ExtendSearchParam addMatch(String field, String query) {
extendConditions.add(new EsCondition(field, Op.match, new Match(query, "100%")));
return this;
}
public ExtendSearchParam addMatch(String field, String query, String match) {
extendConditions.add(new EsCondition(field, Op.match, new Match(query, match)));
return this;
}
}
ここではBuilderモードを参考にして,拡張探索条件をチェーン的に構築できる.これにより、業務側は快適に書くことができます.
extendSearchParam.addIn(ORDER_TAGS, "IS_XXX_ORDER").addMatch("goods_title", goodsTitle);
タイプの強制転換がなくて、底の細部を漏らしていないで、不便な伝値がなくて、またずっとaddを下りることができて、世界はどんなにすばらしいですか!
トラを止める
すぐに、トラに出会った.
private List dealOrderSourceCondition(String orderSource) {
List result = new ArrayList();
result.add(new EsCondition(TYPE_ENTRANCE, Op.eq, "wsc"));
result.add(new EsCondition(TYPE_PLATFORM, Op.eq, "wx"));
return result;
}
Emmmは、この方法を書くパートナーも好意であり、注文源の拡張条件を構築するための方法をパッケージ化するのも好意である.しかし、これはAPIの再構築にわずかな障害をもたらした.
どうやってこの部分を書き直しますか?最初に思いついたのは、dealOrderSourceConditionの方法にパラメータExtendSearchParamを追加し、伝達し、修正することです.目的地にも到達できます.しかし、――「不変」の原則を破壊した.可変原則の要求は、できるだけパラメータの修正を避けることです.このような行為を修正すると、目立たないバグを招きやすく、肝心なプロセスでこのことをすれば、故障を招く可能性があります.有線で教訓を得た.
どうしようかな?dealOrderSourceConditionのパラメータを変更することはできません.また、このメソッドの拡張検索条件を既存の拡張検索オブジェクトにマージします.
方法がある!拡張検索オブジェクトExtendSearchParamをマージします.これにより、ExtendSearchParamはマージ操作をサポートする必要があります.
public ExtendSearchParam merge(ExtendSearchParam extendSearchParam) {
if (extendSearchParam != null && extendSearchParam.has()) {
extendConditions.addAll(extendSearchParam.getUnmodifiedExtendSearch());
}
return extendSearchParam;
}
これにより、dealOrderSourceConditionの戻り値をExtendSearchParamオブジェクトに変更することで、mergeメソッドを使用して拡張検索条件をマージできます.
Yeap ! 考えてみれば、マージ操作のほかに、どのような操作をサポートする必要がありますか?APIの設計は周到な考慮が必要で、1つの問題に出会って1つの支持を加えることができません!
ほじょほうしき
元のOrderSearchParamと連携して使用するには、次のような補助方法が必要です.
public boolean has() {
return CollectionUtils.isNotEmpty(extendConditions);
}
public List getUnmodifiedExtendSearch() {
return Collections.unmodifiableList(extendConditions);
}
小結
この論文では、拡張検索APIの最適化プロセスについて説明します.良いAPI設計は、ビジネス側の使用体験を向上させ、メンテナンスコストを削減します.優雅なAPIを設計するには、工場方法、リロード方法、常用操作など、いくつかのテクニックを身につける必要があります.
仕事の中から最適化が必要なところを絶えず発見し、方法とテクニックを身につけて解決することも、スキルを向上させる方法です.