2009-12-22 4 views
1

나는 단지 할 수있는 그들이 암시 세터있어 일부 코드,하지만 게터의 예에서 :Actionscript 3의 쓰기 전용 접근 장치 : 불량 사례?

public class Person { 

    //no getter! 

    public function set food(value:Food):void { 
     // do something with food. 
     this.processFood(value); 
     this.dispatchEvent(new Event(FoodEvent.EATEN)); 
    } 
} 

이 나에게 나쁜 냄새가 난다. 해키. 어떻게 생각해?

편집 : 글쓰기에 대한 나의 문제점은 일반적으로 내 경험에 따르면 속성은 일반적으로 읽기/쓰기이며, 변수 이름이나 문서에 잘 나타나지 않으면 속성이 쓰기 전용 인 이유에 대해 혼동을 줄 수 있습니다.

+4

public function eatFood (food : Food) : void {...}가 더 적합합니다. – Stefan

답변

4

일반적으로 객체 지향 디자인에서 설정 전용 속성에는 아무런 문제가 없습니다. 생성자에 삽입 할 수 없을 때 setter를 사용하여 종속성 삽입을 구현할 수 있습니다. 세터는 의존성 사이클을 깨뜨리는 데 도움을 줄 수 있습니다. 나는 더 나아가 다른 컨텍스트에서도 set-only 속성에 아무런 문제가 없다고 말하지만, 나는 그것이 논쟁적인 이슈라는 것을 알고 있습니다.

스테판이 말한 것처럼이 경우 반드시 eatFood이라고해야합니다.

+0

고마워, 그건 내게 맞는 소리. – timoxley

2

수업을 구조화하는 데 도움이되는 지침 중 하나는 객체에 의해 실행되는 동사/동작이나 설명하는 특성에 대해 이야기하고 있는지 여부와 관련이 있습니다. 행동은 일반적으로 방법에 의해 가장 잘 묘사되는 반면 특성은 특성에 의해 가장 잘 묘사됩니다. 이 코드의 문제점은 언급 한대로 완벽하게 유효하지만 메소드를 사용해야하는 속성을 사용하고있는 set only 속성을 사용하고 있다는 것이 아닙니다.

+0

동의합니다. 감사 – timoxley

관련 문제