* 세미나 발표자료: AssociationProxyTutorial.pdf
투명한 '뿌락찌' 액티브레코드 연관 클래스는 ActiveRecord::Associations::AssociationProxy 클래스의 확장이다. 이프록시 클래스는 일종의 "투명 프록시(transparent proxy)"로서 개발자들 몰래 숨어서 맡은 역할을 수행한다.그렇지만, 이 프록시의 존재여부를 아는 것과 모르는 것은 차이가 있다. 예를 들어, 우리가 만약 User 모델에서has_many :articles를 선언하게 되면, 이제 우리는 user.articles 와 같이 액세스할 수 있는데, 이 때반환되는 객체가 실제로는 프록시 객체다. 아래 그림은 이 프록시 클래스의 계층구조다. (요즘도 "뿌락찌"라는 말을 아는 사람들이있을까?) ![]() 액티브 레코드의 소스코드를 보면 has_many, has_one, belongs_to, has_and_belongs_to_many와 같은 연관 메서드들이 정의되어 있는 것을 볼 수 있다. 그런데 이들 메서드의 내용을 유심히 보면, 메서드들마다 조금씩다르기는 하지만, 대체로 다음과 같은 로직이 들어 있다. 예를 들어, has_many의 경우를 보자. def has_many(association_id, options = {}, &extension)설명을 덧붙이자면, 우선 주어진 association_id와 옵션정보를 사용하여 리플렉션(Reflection)을 생성한다.리플렉션은 액티브레코드의 클래스나 객체에 대한 메타데이터 정보들을 담는 객체라고 보면된다. 연관 모델인 경우AssociationReflection 객체가 생성될 것이다. 이어서 생성된 리플렉션 객체를 가지고HasManyAssociation 프록시 객체를 생성하고, 리플렉션 정보를 이용하여 각각의 연관관계에서 필요한 헬퍼 메서드들을생성하게 된다. 예를 들어, User 모델에서 has_many :articles 라고 선언 하였다면, 이 메서드에 의해 User모델에 articles(), articles=() 등의 메서드가 만들어지고, 이들 메서드가 호출될 때에 실제로는 아래 그림처럼연관 프록시 객체를 대상으로 작업이 일어나게 되는 것이다. ![]() 더 보기...
|
카테고리
최근 등록된 덧글
저도 장바구니에 넣었습..
by greatdg at 11/30 '호감의 법칙'과 '미러링.. by lesperan at 11/30 요런 http://choboweb.. by 몰아저씨 at 11/13 음 제 경우 지금 메모리.. by 서울비 at 10/25 새 버전이신가 보네요,.. by 연안부두 at 10/22 CPU 사용량이 엄청나군.. by 오스카 at 10/22 드롭박스 깔고 팬이 자주.. by 백일몽 at 10/22 다른 개발자분이 작업하.. by GreatDG at 10/22 최소 3대는 해봐야겠더.. by 펭도 at 10/21 browsershots 같은 .. by thinkr at 10/21 최근 등록된 트랙백
라지엘의 느낌
by laziel's me2DAY 우리는 언제나 창작과 .. by 시답잖은 지식과 개똥철학 월아, 알고리즘 by Read & Lead 우엉의 생각 by oldtype's me2DAY 졸음을 깨우기 위해 재미.. by jack in the box 이젠 업그레이드인가.. ra.. by Always Renewal 제로안의 생각 by zeroan's me2DAY 아샬의 생각 by ahastudio's me2DAY 구글사이트 접속차단 by P-camp & 대안언어축제.. 펭도의 생각 by pengdo's me2DAY 라이프로그
태그
| |||||