1

金額などの情報を格納する値オブジェクトがあります。getAmount() ゲッターは金額をセントで返します。ただし、さまざまな場所で、金額をドルで取得する必要があります。私が考えることができる2つのアプローチがあります:

  1. convert メソッドを作成し、それをユーティリティ クラスに配置します。
  2. 値オブジェクトに getAmountInDollar() ゲッターを追加します。

私は2番目のアプローチを好みます。どう思いますか?両方のアプローチの長所と短所は何ですか?

4

6 に答える 6

4

どの単位を示すオーバーロードを使用してゲッターを一般化する方がよいと思います。そのgetAmount()ため、デフォルトを取得するために呼び出すことがgetAmount(Units.Dollar)できますがgetAmount(Units.Euro)、通貨変換ごとに新しいゲッターを作成しなくても利用できるようになります。

もちろん、これはさらに一般化されるため、温度値をケルビンで内部的に保存することもできますが、他のスケールで温度を取得getAmount(Units.Celsius)または許可することもできます。getAmount(Units.Rankine)

于 2010-03-22T02:42:54.527 に答える
3

正直に言うと、お金は常に 10 進数として表され、内部で 10 進数として使用され、出力時に必要に応じてフォーマットされるべきだと思うので、私はこれに苦労しています。したがって、出力フォーマッタでドル/セントの問題を処理することになるでしょう。

他の通貨単位への変換を処理する必要がある場合は、Money クラスを作成し、金額と単位の情報を含む Money クラスを使用してそれを返します (必要に応じて変換に使用されるサービスへの接続が必要になる可能性があります)。 .

于 2010-03-22T02:33:00.790 に答える
1

それはちょっとした好みの問題です。しかし、私の意見では、この情報が問題のモデルと無関係である場合は、最初のアプローチを優先します。モデルをきれいに保ち、他の利点は、その種類の他のすべての値に再利用できることです。通貨の種類をそのユーティリティ メソッドの別の引数にすると、さらに柔軟になります。ヒント: NumberFormat.

于 2010-03-22T02:27:18.410 に答える
1

私は、クラスのパブリック API をかなり集中させておくことを好みます。「コア」の一部ではないメソッドを追加し始めると、非常に複雑な獣になるリスクがあります。ほとんどデータを保持するだけのクラスの場合、そのように保つように努めます。

結局、明確な「最良の」答えはありません...それはあなたの個人的な経験に基づいています. Mine は、いったん API を「汚染」し始めると止めるのは難しく、最終的にはとにかくクラスを分割する必要があると言っています。

ユーティリティ クラスは、他の関連するメソッドを配置する場所も提供します。

クラスの数を減らすことが目標である場合は、そうしないと思います。クラスにメソッドを含めると、そのようにするよりもコードが「クリーン」になると思われる場合。

于 2010-03-22T02:32:30.260 に答える
0

カプセル化は「ブラック ボックス」シナリオでのデータと動作に関するものであるため、オブジェクト指向の説得のために、2 番目の方法も好みます。

于 2010-03-22T02:27:36.770 に答える
0

私はオプション 1 が好きなので、特定のクラスの特定のフィールドだけでなく、セント単位の任意の値に使用できます。コードの重複なしに、コードの他の場所で使用するオプションを残します。

于 2010-03-22T02:27:53.663 に答える