2010-05-07 5 views
0

작업 영역의 개념을 구현하고 싶습니다. 이것은 글로벌 개념입니다. 다른 모든 코드는이 작업 영역의 한 인스턴스와 상호 작용합니다. 작업 공간은 현재 시스템 상태를 유지할 책임이 있습니다 (예 : 시스템 모델과 상호 작용, 시스템 상태 유지 등)Ruby에서 전역 동작을 구현하는 방법은 무엇입니까?

내 작업 공간에 가장 적합한 설계 전략은 무엇인지 테스트 할 수 있어야합니다. RSpec은 이제는 가능하지만 대안을 살펴보면 행복합니다.)

오픈 소스 프로젝트를 몇 번 읽었을 때 나는 3 가지 전략을 보았습니다. 그 중 어느 것도 "모범 사례"로 식별 할 수 없습니다.

그들은 다음과 같습니다

  1. singleton 클래스를 포함합니다.
    하지만이게 얼마나 시험적인가요? Workspace의 전역 상태가 테스트간에 변경됩니까?
  2. 모든 동작을 클래스 메서드로 구현했습니다. 다시 한번 어떻게 테스트합니까?
  3. 모든 동작을 모듈 방법으로 구현했습니다. 전혀 모른다.

어느 것이 가장 좋습니까? 아니면 다른 방법이 있습니까?

감사합니다, 고든

편집

내 모든 코드에서 '싱글'모듈을 포함하여 시작하고 내가이 세계에 대한 참조로, 내 코드를 만들었다 얼마나 밀접하게 결합 깨달았 인스턴스가 여기 저기에있다.

그래서 완전히 제거하고 전역 인스턴스에 대한 참조를 대신 전달하기 시작했습니다. 하지만 이제는 IOC의 경로를 따라 가고 있습니다. 생성자를 통해 종속성을 전달합니다.

Ruby에서 좋은 생각인가요? 또는 나는 무엇인가 놓치고 있냐?

내가 모르는 사이에 내가 Ruby를 처음 사용했습니다!

답변

0

아마도 표준 라이브러리의 Singleton module이 유용할까요? 클래스에이 모듈을 포함하면 인스턴스를 하나만 만들 수 있습니다. 그런 다음 인스턴스 변수를 사용하여 작업 영역의 상태를 관리 할 수 ​​있습니다.

"싱글 톤 클래스 포함"의 의미라면 미안하지만 "싱글 톤"이라는 용어는 꽤 많은 루비 땅의 비트는 보통 this context입니다.

+0

예! 나는이 용어를 전혀 사용하지 않으려 고 노력했다. 하지만 슬프게도 ... 건배! –

0

싱글 톤 방식이 성능면에서 최상의 선택입니다. 테스트 중에 변경하지 않으려면 모의 테스트를 사용할 수 있습니다.

+0

네, 그렇지만 어떻게 싱글 톤을 테스트합니까? –

관련 문제