2011-02-03 5 views
1

여러 사이트에 배포되는 시스템을 작성 중이며 각 사이트마다 고유 한 구성과 설정이 필요합니다. "구성"은 특정 사이트 (예 : 데이터베이스 URL, S3 버킷 이름)에 필요한 명명 된 값입니다. 모든 구성이 필요하며 일반적으로 기본값이 없으며 일반적으로 문자열 값입니다. 설정은 명명 된 값이지만 시스템의 동작을 조정합니다. 종종 숫자 또는 부울 값이며 일반적으로 기본값이 있습니다.구성 및 설정을 어떻게 구현합니까?

지금까지 필자는 속성 파일이나 그와 비슷한 것을 사용했지만 끔찍한 해결책입니다. 여러 번 개발자는 구성에 대한 요구 사항을 추가했지만 라이브 구성에 대한 파일에 값을 추가하지 않았으므로 새 릴리스는 모든 테스트를 통과 한 다음 출시 될 때 실패했습니다.

모든 파일을 컴파일하는 것이 더 낫습니다. 누락 된 구성 또는 잘못된 유형 중 하나가 있으면 컴파일러를 지나치지 않고 빌드에 사이트 특정 클래스를 주입합니다. 각 사이트. 스칼라 파일은 뼈처럼 복잡한 값, 특히 목록뿐만 아니라 맵과 튜플을 쉽게 모델링 할 수 있습니다.

단점은 개발자가 아닌 사람들이 파일을 유지 관리하기 때문에 속성 파일의 장점 인 자체적으로 설명이 가능해야한다는 것입니다. (누군가가 XML 설정을 나에게 설명한다 : 컴파일 가능한 파일의 모든 복잡성이지만 속성 파일의 런타임 위험성)

내가 찾고있는 것은 그룹에 필요한 이름과 허용되는 값을 정의하기위한 쉬운 패턴이다 . 어떤 제안?

+0

나는 왜 당신의 q가 보이지 않습니다. 유익은 스칼라 특유의 것이다. 중요한 점을 놓치고 있습니까? – Nicolas

+0

Scala *에 구성 파일 *을 쓰고 싶습니다. – Malvolio

+0

나는 당신이 당신의 퀘스트 노의 일부를 잊었다 고 생각합니다. – Nicolas

답변

0

비록 Lift이 본질적으로 웹 프레임 워크이지만, 몇 가지 유틸리티도 있습니다. 그 중 하나가 종속성 주입입니다 (http://simply.liftweb.net/index-8.2.html#toc-Section-8.2 참조). 따라서 예를 들어 기본값이 기본 인 trait을 만든 다음 Runtime, Development, Test ... 환경 값을 하위 클래스로 만들 수 있습니다. 그리고 scala에 대한 지식이없는 사람은 파일에 override def defaultValue = "new value"을 넣는 것이 쉽다 고 생각합니다.

1

믹스 인 조성물을 사용하는 것은 어떻습니까? 특성이 오른쪽에서 적용되기 때문에 우리가 할 수있는 왼쪽으로 :

특성을 정의합니다

기본 속성을 :

trait PropertyA { 
    val userName = "default" 
    def useUserName() : Unit = { 
    println(userName) 
    } 
} 

다른 특성 :

trait SomePropertyA extends PropertyA { 
    val userName = "non-default" 
    def useUserName() : Unit = { 
    println(userName) 
    } 
} 

기본 속성을 추상 클래스를 정의 :

trait HasPropertyA { 
    val prop : PropertyA = new PropertyA 
}

비와 추상 클래스를 정의 - 기본 재산 :

trait HasSomeOtherPropertyA extends HasPropertyA { 
     override val prop:PropertyA = new SomePropertyA {} 
}

을 클래스 사용 기본적으로 하나에서 :

if(env.isSome) { 
    val otherProps = MyClass with HasSomeOtherPropertyA 
    doSomethingWith(prop.userName)// userName == non-default! 
} 
:
trait MyClass extends PropertyA { 
    doSomethingWith(prop.userName) 
}

또는 다른 상황에서 다른 속성을 혼합

논문에서 더 자세히 읽으십시오 Scalable Component Abstractions

관련 문제