3

このリンクでは、異なる通貨の資金を一緒に追加するための Money オブジェクトの関数について説明しています。

まず、Service Locator パターンを使用したくありません。私は現在、Money オブジェクト自体に変換を行わせないパターンを使用しています。異なる通貨を一緒に追加しようとすると、スローされます。

Money オブジェクト (つまり、MultiCurrencyAccount) を所有するオブジェクトで、Money の数学演算を処理します。私の問題は、現在 IMoneyConverter を MultiCurrencyAccount ドメイン オブジェクトに注入するコンストラクターであることです。IMoneyConverter は実際には IForeignExchangeService を使用するサービスであるため、これは私には汚いと感じます (これは DB にヒットする可能性があります)。抽象化を扱っているので、実装を気にする必要がないことはわかっていますが、奇妙に感じます。

私がベースから外れていて、ドメインオブジェクトにサービスを注入することが「正しい」のか、それともよりエレガントな方法があるのか​​ どうかはわかりません。

4

1 に答える 1

3

Money を値オブジェクトとして扱う場合 (これは非常に理にかなっています)、組み込みの変換機能を使用してそれらを設計することは非常に魅力的です。

ただし、ドメイン駆動設計に関するリンクを参照しているため、それが実際にお金をモデル化する正しい方法であるかどうかを自問する必要があります。

ほとんどの場合、米ドルの束が魔法のようにユーロで同等の価値に変わるわけではありません。ドルをユーロに交換するには、両替所に持っていく必要があります。それが済んだら、今はユーロがあり、ドルはありません。その後、為替レートが変動しても、現在のユーロの金額には影響しません。

ずっとこうだとは言ってない。最終的には、ビジネスのドメインによって異なりますが、ビジネスの専門家に尋ねると、通貨取引のビジネス ルールがお金自体から切り離されていることがわかる可能性が高いと思います。この場合、値オブジェクトとは別のサービスとして通貨交換をモデル化する方が理にかなっています。

于 2012-02-05T11:58:33.843 に答える