TIL

APPENDIX C. 동적인 협력, 정적인 코드

01 동적 모델과 정적 모델

행동이 코드를 결정한다.

변경을 고려하라

02 도메인 모델과 구현

도메인 모델에 관하여

몬스터 설계하기

public abstract Monster {
  private int health;
  // ...
  abstract public String getAttack();
}

public class Dragon extends Monster {
  public Dragon() {
    super(230);
  }
  
  @Override
  public String getAttack() {
    return "용은 불을 내뿜는다.";
  }
}
public class Breed {
  private String name;
  private int health;
  private String attack;
  
  // ...
}

public class Monster {
  private Breed breed;
  // ...
  
  public String getAttack() {
    return breed.getAttac();
  }
}
Monster dragon = new Monster(new Breed("용", 230, "용은 불을 내뿜는다."));
Monster troll = new Monster(new Breed("트롤", 48, "트롤은 곤봉으로 때린다."));

행동과 변경을 고려한 도메인 모델

// 게임 도메인 모델은 아래와 같이 표현할 수도 있다.
{
  "breeds": 
  [
    { "name": "용", "health": 230, "attack": "용은 불을 내뿜는다." },
    { "name": "트롤", "health": 48, "attack": "트롤은 곤봉으로 때린다." }
  ]
}

분석 모델, 설계 모델, 그리고 구현 모델