2012-09-17 3 views
2

주로 학습 목적으로 모기지 계산 도구의 디자인을 최적화 할 수있는 영역을 검토 중입니다. Anemic Domain Models에 대해 읽은 후에, 나는 Rich Model을 만드는 것에 관심을 가지게되었고 현재의 구현이 빈혈을 일으킬 수도 있음을 알았습니다!빈혈 도메인 모델 사례 분석

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; 
} 

는 현재 모기지 객체는 객체 사이의 데이터 전송을 위해 주로 제공 등 여기

내가 고려하고 일부 개정 옵션이 있습니다 :

  1. 제거 여기에 의사의 현재 구현은 MortgageCalculator에서 모기지 객체를 꺼내고 모기지 을 순수하게 DTO로 사용하면서 계산기의 메소드가 인수를 취합니다 (예 : calculateMonthlyPayment (loanAmount, interestRate)). 이것은 모기지를 디커플링하는 데 도움이됩니다. Calculator를 Mortgage 오브젝트에서 가져 왔지만 여전히 모기지를 빈혈 모델로 사용합니다.
  2. 비즈니스 로직 (예 : calculateMonthlyPayment)과 모기지 속성 (예 : loanAmount)을 모두 포함하는 "풍부한"MortgageCalculator 모델로 두 클래스를 병합합니다. 내 우려 여기에 계산기 개체 인스턴스 변수로 피연산자를 보유하는 데 필요한 경우 확실하지 않다 그러나 그들은 데이터 전송, 저장 및 용이하게 빈혈을 해결할 것이라고 ?

이상적인 접근 방식이 무엇인지 궁금하거나 내가 그 요점을 놓치고 있습니까?

답변

3

아마도 Mortgage 개체가 계산의 일부를 수행 할 수 있습니다. 예를 들어, 주문 합계 계산하는 객체 생각이이 Feature Envy로 알려져있다

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

및 수 :이 데이터베이스에 채워지지 않기 때문에

for (Line line : orderLines) 
    int total += line.calculateTotal(); 
2

MortgageCalculator 실제로 도메인 엔티티 아니다 그래서 당신이 Mortgage 엔티티에 논리를 빈혈 병합 할 수 있습니다 피하기 위해 :

class Mortgage { 
    loanAmount; 
    interestRate; 

    calculateMonthlyPayment(); 
} 

또 다른 사실 : DTO는 도메인 엔터티와 다르며 DTO는 배포 환경에서 데이터를 전송하는 반면 도메인 엔터티는 도메인 논리에 초점을 맞추는 것입니다.

도메인 엔티티는 DTO로 사용할 수 있습니다. 일부 경우 DTO가 도메인 엔티티와 동일한 속성을 갖고 있기 때문입니다. 그러나 대부분의 경우, 각 클라이언트에 따라 달라지며 둘 이상의 도메인 엔터티가 필요한 데이터를 가져와야 할 수도 있습니다. 그래서, 우려보다 유지 관리의 분리, DTO 도메인 엔티티와 분리 만들 제안 될 것이다 :

class MortgageDto { 
    loanAmount; 
    interestRate; 
} 
0

당신이 당신의 경계 컨텍스트 (BC)를 모른다면 당신은 DDD 할 수 없습니다. 이 경우 BC가 무엇입니까? 모두가 그것에 달려 있기 때문입니다.

귀하의 경우에 이해할 수있는 양식을 작성하십시오. 모기지 계산 방법은 여러 가지가 있으므로 모텔 계산기를 사용하는 것이 좋습니다. 이 클래스는 모기지 인수를 취할 수있는 방법을 가질 수 있습니다. 물론 내가 말한 것은 내가 도메인을 모르기 때문에 잘못 될 수 있습니다.

필요한 도메인에서 전문가가 아닌 경우 DDD에 대한 구체적인 질문을 항상 어렵습니다. 그러나 BC는 BC에서 다시 시작됩니다. 귀하의 BC는 무엇이며, 모기지의 비즈니스 역할은 무엇입니까?