私は物流クエリのための安らかなAPIを作成しようとしています。パラメータで実装する方法を選択するにはJavaで
shipping_idとtracking_numberの2つのパラメータを受け取り、サードパーティのAPIを呼び出して結果を取得し、何か処理します。
異なる企業によって数多くの第三者APIが提供されており、呼び出すにはshipping_idの値によって異なります。
私の解決策は、このようなものです:
スーパークラスのLogisticsQueryController "
、多くのサブクラスがあるでしょう:
'ALogisticsQueryController'、 'BLogisticsQueryControllerは' ... 'LogisticsQueryController' を拡張します。
マップを保持する( 'shipping_id' => 'class_dir')。
shipping_idを指定すると、shipping_idでclass_dirを取得し、リフレクションを使用して新しいインスタンスを取得できます。
しかし、Javaでのリフレクションが非効率である可能性があると聞いたので、より良い解決策は何ですか?
はい反射は非効率的です。あなたのシナリオでリフレクションを使用する理由がわかりませんでした。 –
jax rsやその他のフレームワーク(springmvcコントローラ)を使用していますか?フレームワーク全体がリフレクションを使用していると思いますので、リフレクションに起因するパフォーマンスの問題については心配しません。しかし、配送IDが場所の一部になるようなサービスURLを変更することはできますか(パラメータを取得するのではなく、たとえばhost.com/rest/service1/shippingid1)?その後、コントローラーを関連するURL(および出荷ID)に直接マップすることができます – fairtrax