2013-05-24 12 views
5

私はこのようなメソッドシグネチャを持っています。Javaのメソッドで効率的なパラメータを渡す

public void calculateFinalInvoice(int a, int b, int c, int d, int e, int f, int g, int h, int i, InvoiceDO invoiceDO) { 
    // TO DO 

} 

私はsomanyパラメータを渡しています。したがって、これらのパラメータをすべてパフォーマンスに合わせて渡す方が良いでしょう。 または 1)このすべてのパラメータのクラスを維持する 2)これらのすべてのパラメータに対してHashMapを維持する 3)このためのArrayListを維持する。

パフォーマンスを上げるにはどちらが良いかお教えください。

+0

は、それが常に 'パラメータの数をi'しますか? –

+0

これはどのくらい頻繁に呼び出されますか? – waldol1

+9

コードのメンテナンスにクラスを使用します。あなたが必要としない限り、パフォーマンスについて心配しないでください。 –

答えて

2

使用しているJavaのバージョンは?これらのパラメータで何をやっていますか?

calculateFinalInvoice(InvoiceDO invoiceDO, int args...) { 
} 
+0

私はJava 1.6を使用しています – John

+0

コードにはタイプミスがあります。それはcalculateFinalInvoice(InvoiceDO invoiceDO、int ... args){} –

0

は、あなたは、単にint型

calculateFinalInvoice(int[] values, InvoiceDO invoiceDO) { } 
+0

私はどのように私のサービス層のthieseをしたいですか? – John

+0

@sorryはあなたを得ていません.. int配列を渡す問題はありますか? – stinepike

+0

はいそれも可能です。それは効率的なパフォーマンス賢明なことができますか? – John

1

ドの配列を渡すことができます:あなたが欲しいしかし、多くのint Sを渡すためにvarargsを使用して、引数リストの先頭にDAOを移動したほうが良いかもしれませんこのようなものでマイクロ管理効率を心配する必要はありません。明確にするためのコードとコーディングを行った後、必要に応じて効率を心配してください。この場合、デザインを再考し、コードに構造を追加することをお勧めします。たとえば、配列を使用することができます。

public void calcualteFinalInvoices(int [] invoices, InvoiceDO action){ 
    //... 
} 
0

パフォーマンスについては忘れてしまいます。これは問題ではありません。問題は、エンジニアのための公式が1インチを超えてはならないのとまったく同じように、メソッドは3つ以上の引数を取るべきではないということです。さらに必要な場合は、デザインを変更してください。

特別なパラメータクラスを作成し、そのインスタンスをメソッドに渡す必要があります。または、いくつかのデータをインスタンスフィールドとして格納する別のクラスにメソッドを配置します。

デザインの修正に関するアドバイスが必要な場合は、何をしようとしているのかを説明してください。私はコミュニティがあなたのデザインを改善するのに役立つと信じています。

+0

愚かなルールは愚かです。関連するパラメータのクラスタを見つけて、それらをオブジェクトとして渡すことは可能かもしれません。しかし、このようなオブジェクトの作成は、パラメータを渡すよりも必然的に遅くなります。 –

+0

ありがとうございます。 – John

+1

親愛なる@Bob Dalgleish、愚かなルールの助け。あなたは10の議論を受け入れる方法を好きですか?彼らは便利ですか?彼らは使いやすいですか?これについて考えます。 – AlexR

1

私はあなたにもっとOOPの、より読みやすいアプローチを与えたいと思います。

コードサンプルは"my string".trim()ではなくtrim("my string")を呼び出すのと同じです。これは手続き型プログラミングであり、コードはパッシブデータ(trim"my string"で作業しています)で動作します。 OOPでは、代わりに"my string".trim()"のように要求を満たすためにオブジェクトにメッセージを送信します。

代替手段は、その値または内容を求めることができる概念としてInvoiceを識別します。私たちはmethod chainingencapsulationを使用して、最も読みやすく保守性の高いプログラムを入手します。異なる変数に特別な意味がある場合はaddの特定のバージョン(addBalanceなど)でInvoiceクラスを飾ることができます。このような

class Invoice { 
    private final List<Integer> values = new ArrayList<Integer>(); 

    public Invoice add(int value) { 
     values.add(value); 
     return this; 
    } 

    public double value() { 
     // Use the values to compute the final invoice. 
     return computedFinalInvoice; 
    } 
} 

用途:

double finalInvoiceValue = new Invoice() 
    .add(1) 
    .add(2) 
    .add(100) 
    .value(); 
関連する問題