2011년 5월 26일 목요일

Change Unidirectional Association Bidirectional



각각 서로의 기능을 필요로 하는 클래스가 있는데 링크가 한쪽 방향으로만 되어 있는 경우 반대 방향으로 포인터를 추가하고, 수정자가 양쪽세트를 모두 업데이트하게 변경하라

!  동기
  • 참조되는 클래스를 사용하는 클라이언트 코드에서 다른 클래스를 알아내야 할 경우가 생길 수 있다. 이것은 결과적으로 포인터의 반대 방향을 알아내야 하는 것이다. 포이터는 단방향 링크이므로 이것은 불가능하다.
  • 양 방향성을 구현하기 위해서 역 포인터를 사용한다.

! 절차
  • 역 포인터를 위한 필드를 추가한다.
  • 어떤 클래스가 이 연관을 제거할 것인지 결정한다.
  • 이 연관을 제어하지 않는 쪽에 헬퍼 메소드를 만든다.
  • 이 메소드의 이름이 제한됭 용법을 명확하게 나타내도록 정한다.
  • 연관을 제어하는 쪽에 수정자가 있으면, 역 포인터를 업데이트하도록 수정한다.
  • 만약 수정자가 제어되는 쪽에 있다면, 제어하는 쪽에 제어 메소드를 만들고, 수정자에서 이 메소드를 호출 하도록 한다.

! 관련 리팩토링
TIP
1.       두 객체가 모두 참조 객체 이고, 연관이 일대다 인 경우, 하나의 참조를 가지는 객체를 컨트롤러로 한다.
2.       한 객체가 다른 객체의 일부로 사용된다면, 그 객체를 포함하고 있는 객체가 연관을 컨트롤 한다.
3.       두 객체가 모두 참조 객체이고, 연관이 다대다인 경우 어느 쪽도 연관을 컨트롤 하든 상관없다.

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...