2016-11-07 9 views
1

私は、少なくとも5つの具体的な実装のために共通のServiceインターフェイスを設計しています。現在、これらのサービスはすべて異なるタイプのインプットを必要とします。私はパラメータを保持するためにParamクラスを作成することを考えていました。しかし、いくつかの実装では、フィールドのいくつかは使用されません。私もMapを使って私のパラメータを保持することを考えましたが、それはまた良くありません(キャストとif-elsesどこでも)。また、私は静的メソッドService.responseAsPerFirstImplementation(p1, t1, i1)などでクラスを作成することを考えました。しかし、この方法は良いコーディングではありません。モジュール設計、柔軟性とパラメータのバラツキの間でどのように設計すべきかをお勧めしますか?異なるタイプのパラメータを使用したサービスの設計java

編集: それを行う良い方法はありますか?

public class Client { 

    public static void main(String[] args) { 
     System.out.println(Services.response(new UserParam(1, new Date()))); 
     System.out.println(Services.response(new PatternParam("core"))); 
    } 

} 
+0

なぜ共通のインターフェイスが必要なのですか? – lexicore

+0

実装をクライアントに公開しないようにします。私は 'サービス'クラスから 'Service'インスタンスを取得するメソッドを使用したいと思います(インスタンスのキャッシュなどをサポートするため) – GurV

+1

しかし、なぜ*共通の*インターフェースですか? – lexicore

答えて

1

私はあなたのパラメータは、いくつかの「汎用」、非構造化sourcelike HTTPリクエストパラメータやコマンドライン引数またはいくつかの構造化されたソースから来る場合は、質問の核心だと思う - あなたが知っているように私はそこにスイングフォームを置きますあなたが持っているUI要素を前進させてください。

「汎用」パラメータの場合、これらのパラメータをサービスが処理できるものに変換する必要があります。手動またはライブラリ/フレームワークを使用してこれを行うことができます。 - あなたはにCLIパラメータをマッピングするためにargs4jなどの代に使用できるコマンドラインパラメータと同様に

@RestController 
@RequestMapping("/trainRun") 
public class TrainRunController { 

    @RequestMapping(value = "/{year}/{month}/{day}/{trainNumber}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) 
    public TrainRun getTrainRun(@PathVariable Integer year, @PathVariable Integer month, @PathVariable Integer day, 
           @PathVariable String trainNumber) { ... } 
} 

:たとえば、あなたはあなたのHTTPリクエストとそのパラメータは、お使いのコントローラ/サービス/メソッドにマップする方法を記述するためのアノテーションを使用することができますまずJavaオブジェクトを作成し、サービスを適切に呼び出します。

これが役に立ちます。

関連する問題