2013-04-01 2 views
1

캔버스 페인팅 앱을 쓰고 있습니다.재사용해야 할 방문자가 정적입니까?

일부 작업에는 마우스로 선택한 도면을 사용할 때마다 사용할 방문자가 있습니다.

Visitor visitor = isStateSelected ? new SelectionVisitor() : DrawVisitor(); 

나는이 방문자가 정적 만드는 고려, 또는 적어도 그들을 위해 민간 분야를 소개해야 : 순간 내가 좋아 다시 항상 방문자를 다시? 아니면 현재의 방식이 더 깨끗하고 객체 생성이 큰 오버 헤드가 아니라고 주장 할 수 있습니까?

+0

나는 확실히 후자를 주장 할 것이다. 그것들을'static' 또는 persistent하게 만들면 스레드 안전성이 문제가됩니다. 코드를 쉽게 읽을 수 없도록 만드는 것은 버그가 발생하기 쉽기 때문에 거의 좋은 아이디어는 아닙니다. –

답변

2

해당 방문자를 트리거하기 위해 상태 패턴을 사용하는 것이 좋습니다. 캐시는 응용 프로그램 계층에서 실제로 나쁜 아이디어입니다. 도메인 모델 클래스는 그것들을 참조해서는 안되며, 설정 레이어에만 존재해야합니다.

+0

"상태 패턴 유발 방문자"라는 것이 정확히 무엇을 의미하는지 몇 가지 힌트를 주시겠습니까? – membersound

+0

물론입니다. 상태 패턴 (Wikipedia의 페이지)은 사용하기 쉬운 것 중 하나입니다. 기본적으로 상태가 변경 될 때 사용중인 참조를 문자 그대로 변경하려고합니다. 따라서 방문자에 대한 참조가있는 컨텍스트 개체가 있다고 가정 해 봅시다. 상태가 변경되면 해당 참조를 다시 할당하기 만하면됩니다. 위키 백과 페이지 : http://en.wikipedia.org/wiki/State_pattern – Rob

1

이 개체 생성이 앱의 병목 현상이라면 개인 캐시가 다음 단계라고 생각합니다. 속도가 느려지지 않으면 다음 문제로 넘어갈 수 있다고 생각합니다.

나는 코드를 깨끗하게 유지하려고 노력합니다. 방문자 캐시를 사용하여 코드를 muddy하지 않으려면 캐시 변수를 관리하는 고유 한 방법 인 private getVisitor()에서 이것을 래핑하여 별도로 유지할 수 있습니다.