2017-03-09 2 views
0

Stripe java apiでHashMapを使用する理由は何ですか? stripe.comからStripeがjava apiでMapを使用する理由

Stripe.apiKey = "sk_test_BQokikJOvBiI2HlWgH4olfQ2"; 

Map<String, Object> ownerParams = new HashMap<String, Object>(); 
ownerParams.put("email", "[email protected]"); 

Map<String, Object> sourceParams = new HashMap<String, Object>(); 
sourceParams.put("type", "bitcoin"); 
sourceParams.put("amount", 1000); 
sourceParams.put("currency", "usd"); 
sourceParams.put("owner", ownerParams); 

Source source = Source.create(sourceParams); 

Map<String, Object> chargeParams = new HashMap<String, Object>(); 
chargeParams.put("source", source.getId()); 
chargeParams.put("amount", source.getAmount()); 
chargeParams.put("currency", source.getCurrency()); 
Charge charge = Charge.create(chargeParams); 

理由だけではなく、getterとsetterで、単純なJavaオブジェクトを使用していませんか? (私はJavaで独自の実装を行うことができますが、これはHTTPリクエストだからだと理解しています)

答えて

0

これは私が何度もポップアップしたパターンです。次のいずれかを行うことができます。

  1. マップをDTOとして使用します。
  2. MyClassは、オブジェクト(POJO)をDTOとして拡張します。

このトピックについては多くのスレッドがあります。 1,2,3

しかし、あなたはストライプから表示されていることは、彼らは単にPOJOに変換する前に、スタッフリクエスト属性への仲介としてMapを使用していることを、正確にではありません。

これは、POJO Builderパターンとして使用されるマップによく似ています。代替は、次のようになります。私が好むものですし、(例えば)AWSのほとんどすべてがどのように動作するかである

Source source = new Source.Builder() 
    .withType(type) 
    .withAmount(amount) 
    .build(); 

しかし、JSONシリアライザの観点からはマップを変換してから、POJOに構文的な綿毛やフレームワーク-yのものを追加する方が簡単だと思います。つまり、基本的には実装の決定だけです。

また、ごくわずかなリクエストオブジェクトに比べてAPIのリクエスト属性が高い場合は、構造化データよりもフィールドの辞書に似ています。

われわれのファンシーJavaナンセンスのすべての後で、これはとにかくJSONのString辞書になることを忘れてしまいます。本当に#YOLO。

+0

私はMap over Builderも好きです。メソッドにjava docを追加し、内部の検証などを行うことができます。 Stripeは高品質のソフトウェアを生み出しており、JavaライブラリのMapを見るのは奇妙なことでした。 –

0

私は正確な詳細はわかりませんが、理由は非常に単純です。彼らは、それぞれのプロパティを取得する代わりに&を設定することを避け、マップを使用してキーと値を適切に設定します。彼らはおそらくJSONを扱っています。たとえそれがXMLであっても、必要なプロパティを手動で設定して取得する必要があるたびに、マップを使用する方がプレーンなObjectを使用するよりはるかに簡単です。逆に、多くのプロパティはオプションであるため、mapを介して渡される値を設定するだけで、オブジェクトをマップ上で反復する方が簡単です。

+0

ストライプAPIとそのすべてを見ると、できるだけ簡単な方法でストライプAPIを実行することができます。スタッフは非常に使いやすくしています。つまり、クライアントの観点からは、getterとsetterを持つObjectの代わりにMapを維持する方が簡単だと考えています。そして、なぜ私は理解していない。 –

関連する問題