2010-05-26 4 views
1

나는 Martin Fowler (비추천) 모델 - 뷰 - 발표자 패턴의 팬이다. 몇 가지 버튼 클래스가 포함 된 스칼라 뷰 클래스를 작성 중입니다. 발표자가 호출 할 단추의 동작 속성을 설정하는 메서드를 포함하고 싶습니다. 일반적인 코드 조각은 다음과 같습니다.스칼라 모델 - 뷰 - 발표자, 특성

private val aButton = new JButton 
def setAButtonAction(action: Action): Unit = { aButton.setAction(action) } 

이 코드는 각 버튼에 대해 반복됩니다. Java/Scala에 C 전 처리기가 있으면이 코드를 생성하는 매크로를 만들겠습니다. 버튼 이름이 주어지면 (C 전처리 기의 악의에 대한 강의는 제발). 이 코드는 분명히 매우 장황하고 반복적입니다. 스칼라에서 이것을 할 수있는 더 좋은 방법은 아마도 형질을 사용하고 있을까요?

scala.swing에 대한 강의를하십시오. 나는 여기에 일반적인 패턴을 찾고있다.

답변

4

스칼라는 java보다 명시적인 setter 및 getter 메소드에 관한 정보가 적습니다. 대신 추상 필드를 사용하여 노출 된 인터페이스를 정의하십시오. 이런 일에 대해 어떻게 : Container에 대해 운영

trait ActionUser { 
    def setAction(action:Action):Unit 
} 

trait Container { 
    val aButton:ActionUser 
} 

trait ContainerImpl { 
    val aButton = new JButton with ActionUser 
} 

클래스는 내부 방법이하는 JButton으로 볼 때 setAction에 액세스 할 수 있습니다.

메모 : C는 코드 중복을 줄이기 위해 매크로를 사용합니다. 스칼라는 특성의 다중 상속을 사용하여 동일한 작업을 수행합니다.

+0

멋진 답변입니다. 나는 이것을 더 깊이 탐구 할 것이다. – Ralph

+0

@ 랄프 탐험을 했습니까? 스칼라에서 MVP 용 스켈레톤 코드를 공유 할 수 있습니까? 나는이 현상금을 현상금으로 물어 보았다. http://stackoverflow.com/questions/17631080/mvp-in-scala-swing – MyTitle

+0

@MyTitle : 나는 이것을 탐구하는 몇 년 동안 프로젝트를 시작했으나 계속 진행해야했다. 다른 프로젝트로 돌아가 결코 돌아 가지 않았습니다. 내가 그것을해야만한다면, 나는 sblundy의 대답에 나타난 패턴을 사용할 것입니다. – Ralph

관련 문제