2

主に学習目的で、住宅ローン計算ツールの設計を最適化できる領域を検討しています。貧血ドメインモデルについて読んだ後、リッチモデルの作成に興味を持ち、現在の実装に貧血がある可能性があることに気づきました。擬似コードの現在の実装は次のとおりです。

class MortgageCalculator {
  Mortgage mortgage; // mortgage object containing loanAmount, interest rate, etc.;
  calculateMonthlyPayment(); // calculates monthly payments using mortgage object's properties
}

class Mortgage { // Anemic?
  loanAmount;
  interestRate;
}

現在、Mortgageオブジェクトは、主にオブジェクト間のデータ転送などに使用されます。

これが私が検討しているいくつかの改訂オプションです:

  1. MortgageCalculatorからMortgageオブジェクトを削除し、計算機のメソッドが引数を取る間、Mortgageを純粋にDTOとして使用します(例:calculateMonthlyPayment(loanAmount、interestRate)。これは、MortgageCalculatorをMortgageオブジェクトから分離するのに役立ちますが、Mortgageはアネミックモデルとして使用されます。 。
  2. 両方のクラスを1つの「豊富な」MortgageCalculatorモデルにマージします。このモデルには、ビジネスロジック(例:calculateMonthlyPayment)と住宅ローンのプロパティ(例:loanAmount)の両方が含まれています。ここでの私の懸念は、電卓オブジェクトがそのオペランドをインスタンス変数として保持する必要があるかどうかわからないことですが、それらはデータの転送、保存を容易にし、おそらく貧血を解決しますか?

私は理想的なアプローチは何であるか、または私が要点を逃しているかどうか疑問に思っていますか?

4

3 に答える 3

3

おそらく、Mortgageオブジェクトは計算の一部を実行できます。たとえば、注文合計を計算するオブジェクトを考えてみます。

for (Line line : orderLines)
  int total += line.getPrice() * line.getQuantity();

これはFeature Envyとして知られており、次の可能性があります。

for (Line line : orderLines)
  int total += line.calculateTotal();
于 2012-09-17T02:41:57.923 に答える
2

MortgageCalculatorデータベースに入力されていないため、実際にはドメインエンティティではありません。貧血Mortgageを避けるために、ロジックをエンティティにマージできます。

class Mortgage {
   loanAmount;
   interestRate;

   calculateMonthlyPayment();
}

もう1つ、DTOはドメインエンティティとは異なります.DTOは分散環境でデータを転送するためのものですが、ドメインエンティティはドメインロジックに焦点を当てています.

場合によっては、DTO は Domain Entity と同じプロパティを持っているため、DTO として Domain Entity を使用できます。ただし、ほとんどの場合、各クライアントに依存し、複数のドメイン エンティティを必要とするデータを取得する必要がある場合があります。したがって、関心を分離し、より保守しやすくするために、ドメイン エンティティで分離された DTO を作成することをお勧めします。

class MortgageDto {
   loanAmount;
   interestRate;
}
于 2012-09-17T04:49:40.917 に答える
0

境界付けられたコンテキスト (BC) がわからない場合は、DDD を実行できません。では、この場合の BC とは何ですか? すべてはそれにかかっているからです。

あなたのケースで私が理解していることから、 MortageCalculator を持っているのは良いことだと思います。このクラスは、Mortgage 引数を取るメソッドを持つことができます。もちろん、私はあなたのドメインを知らないので、私が言ったことは間違っているかもしれません.

必要な分野の専門家でなければ、DDD に関する具体的な質問に答えるのは常に困難です。しかし、すべては BC から始まります。繰り返しになりますが、あなたの BC とは何か、住宅ローンのビジネス上の役割は何ですか?

于 2012-09-18T07:09:14.257 に答える