문제

그래,내가 원하지 않을 시작하는 거룩한 성전이 여기 있지만 우리는 과정에서의 노력을 통합하는 방법으로 우리는 손잡이의 응용 프로그램 구성 파일에 우리는 어려움을 겪고 있어에 대한 결정을 내리는 최고의 방법을 적용해야 합니다.는 순간에,모든 응용 프로그램을 우리가 배포하는 것은 그것을 사용하여 자신의 임시 파일 구성,여성 파일(ini 스타일),JSON 또는 XML(내부적으로만 사용 순간에!).

대부분의 우리의 코드입니다 Java 순간에,그래서 우리가 보고 Apache Commons Config, 하지만 우리는 그것을 발견하는 매우 자세한 정보를 표시합니다.우리는 또한 보았 XMLBeans, 지만,그것은 많은 것 같 faffing 니다.또한 느낌으로만 나가로 밀려는 XML 형식으로만,나의 클라이언트와 동료들에 대해 우려하려고 다른 뭔가가 있습니다.나는 그것을 이해할 수 있는 클라이언트의 관점에서,모두가 들어 XML,그러나 끝에서의 하루,사용하지 않아야 올바른 도구를 작업에 대한?

무슨 형식과 라이브러리를 사용하는 사람들은 생산 시스템에 이러한 일이 다른 사람을 피하기 위해 노력하고 각 부류는 세금?

편집: 정말 필요할 크로스 플랫폼 솔루션:리눅스,윈도우,Solaris etc.고의 선택에 사용되는 라이브러리와 인터페이스 구성 파일만큼이나 중요한 선택의 형식입니다.

도움이 되었습니까?

해결책

XML XML XML XML.우리가 얘기 config 파일에 여기에.이 없다"각 부류는 세금"당신은지를 직렬화하는 개체에서의 성능-강렬한 상황이다.

Config 파일이어야 인간의 읽고 인간의 이해할 수 있다,또한 기계로 읽을 수 있습니다.XML 좋은 타협입니다.

는 경우에 당신의 가게가 있는 사람들은 두려워하는 새로운 신기한 XML 기술,나는 기분이 좋습니다.

다른 팁

YAML,간단한 이유로 그것은 아주 읽을 수 있는 설정 파일에 비해 XML.

XML:

<user id="babooey" on="cpu1">
    <firstname>Bob</firstname>
    <lastname>Abooey</lastname>
    <department>adv</department>
    <cell>555-1212</cell>
    <address password="xxxx">ahunter@example1.com</address>
    <address password="xxxx">babooey@example2.com</address>
</user>

YAML:

    babooey:
        computer : cpu1
        firstname: Bob
        lastname: Abooey
        cell: 555-1212
        addresses:
            - address: babooey@example1.com
              password: xxxx
            - address: babooey@example2.com
              password: xxxx

예제에서 촬영되었 이 페이지: http://www.kuro5hin.org/story/2004/10/29/14225/062

먼저:이것은 정말 큰 논쟁이 문제가 아니라 빠르 Q+A.

내 마음에 드는 지금은 단순히 포함 Lua, 기 때문에,

  • 나는 허용할 수 있습 같은 것들을 너비=높이*(1+1/3)
  • 내가 만들 수 있는 사용자 정의 기능 이용 가능
  • 나는 금지할 수 있다.(불가능에,예를 들면,파이썬(을 포함하게 된다.))
  • 나는 이 스크립트 언어는 다른 곳에서 프로젝트 anyway.

또 다른 옵션이 많을 경우에는 데이터를 사용하는 것입 sqlite3, 기 때문에,그 권리를 주장

  • 작습니다.
  • 빠릅니다.
  • 신뢰할 수 있습니다.

선택하 어떤 세 가지입니다.

를 추가하고 싶다:

  • 백업 스냅합니다.(다만 복사합 db file.)
  • 쉽게 전환하는 다른 db,ODBC,어떤 것이다.(보다 그것은 못 생기고 파일)

그러나 다시,이것은 큰 문제입니다."큰"대답하여 이것은 아마도 포함한 어떤 종류의 모체 또는 목록의 상황은 다음과 같:

량의 데이터,또는 짧은 런타임

  • 많은 양의 데이터에 대한할 수 있습니다 효율적으로 저장처럼,db 입니다.
  • 에 대한 짧은행(자주)할 수 있습니다 당신이 뭔가를 할 필요가 없을 많이 구문 분석,고려될 수 있는 무언가 mmap:ed 에서 직접.

무엇을 구성과 관련?

  • Host:
    • 나는 다음과 같 YAML/etc.는 재 windows?
  • 용:
    • 당신은 당신을 허용하는 사용자 편집 config 텍스트 편집기입니까?
    • 해야 그것은 중앙에서 관리가 가능하고?레지스트리/gconf/원격 db?
    • 할 수 있는 사용자가 여러 가지 서로 다른 프로필?
  • 프로젝트:
    • 파일(s)에서 프로젝트 디렉토리?(버전을 제어하는 일반적으로 다음과 같이...모델)

복잡성

  • 거기에있는 몇 가지 편평한 가치입니까?고려집니다..
  • 데이터입니다 중첩,거나 의존에서는 몇 가지 방법이 있을까?(이것은 어디 그것은 흥미로운 가져옵니다.)
  • 수도 그것은 바람직한 기능을 허가 일부 형태의 스크립트?
  • 템플릿을 볼 수 있습의 종류로 구성 파일이..

시작하지 않고 새로운 거룩한 전쟁,감정의 각 부류는 세금'게시는 하나의 영역입니다 나는 majorly 동의하지 않는 제프.아무것도 잘못된 XML,그것은 인간의 합리적으로 읽을 수 있는(만큼 YAML 또는 JSON 또는 INI 파일이 있는)하지만 기억한다는 의사표시를 읽을 수여 기계입니다.가장어/framework 콤보 XML 파서의 일종 무료는 XML 꽤 좋은 선택이 될 것입니다.

또한,사용하는 경우에는 좋은 IDE Visual Studio 와 같은 경우에는 XML 온다는 스키마에게 제공할 수 있습 스키마를 대고 마술을 얻을 intellisense(얻을 수 있습니다 NHibernate 예를 들어).

Ulimately 생각을 해야 하는 방법에 대해 자주 당신을 만지는 이러한 파일에 한 번 생산,아마 되는 경우가 종종 있습니다.

이것은 여전히 말하는 나를 위해 모든 것에 대한 XML 그리고 왜 그것은 여전히 유효한 선택은 config 파일에서( 팀 Bray):

"을 제공하고 싶은 경우에는 일반적인 데이터를 수신할 수 있습을 예상치 못한 이상하고 미친 것으로,또는 당신이 원하는 것을 정말 편집증과에 대한 까다로운 i18n,또는 당신을 보내 같은 더 많은 것이 문서보다는 구조체 또는 경우에 데이터의 문제는 경우 또는 데이터는 잠재적으로 긴 수명(으로서,보다 더 많은 초)XML 은 이동 방법입니다.그것은 또한 나에게 보인 조합의 XML 및 XPath 시 달콤한 데이터 형식해야 하는 확장 가능한;말하자면,그것은 아주 쉽게 쓰는 XML 처리하지 않는 코드에서 실패의 존재를 변경하는 메시지 포맷하지 않는 조각을 터치합니다"

@남자

하지만 응용 프로그램 구성되지 않은 항상 그냥 키/값 쌍으로 이루어져 있습니다.에서 볼 무언가가 다음과 같 tomcat 구성 포트는 무엇 수신합니다.예를 들어 다음과 같습니다.

    <Connector port="80" maxHttpHeaderSize="8192"
           maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
           enableLookups="false" redirectPort="8443" acceptCount="100"
           connectionTimeout="20000" disableUploadTimeout="true" />


    <Connector port="8009" 
           enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />

당신할 수 있 커넥터가 있습니다.정의에서 더 많은 파일이 더 커넥터가 존재합니다.를 정의하지 않 더 이상 더 이상 존재합니다.이 없는 좋은 방법(imho)을 하는 일반 구 키/값 쌍으로 이루어져 있습니다.

응용 프로그램의 구성이 간단하고,다음과 같은 간단한 INI 파일을 읽으로 사전입니다 아마도 괜찮습니다.하지만 무언가를 위해 더 복잡한 같은 서버의 구성,INI 파일에 엄청난 고통을 유지하고,무언가를 더 구조상 같은 XML 또는 YAML 더 좋을 것이다.이에 따라 모든 문제를 설정합니다.

우리가 사용하는 ini 스타일 config 파일이 있습니다.우리가 사용하는 Nini 라이브러리를 관리할 수 있습니다.Nini 하게 사용하기 매우 쉽습니다.Nini 었 orignally 습니다.순 있지만 그것은 포팅되었습니다 다른 플랫폼을 사용하여 모노.

XML,JSON INI.
그들은 모두 자신의 강점과 약점이 있습니다.
응용 프로그램에서 컨텍스트가 느끼는 추상화 계층은 중요한 것입니다.
당신이 선택할 수 있는 방법은 구조화하는 데이터는 좋은 중간 사이에 인간의 가독성과할 방법에 액세스/추상적 데이터 코드에 당신은 황금입니다.

우리는 대부분 XML 을 사용하는 작업,그리고 나는 정말 믿고 구성 로드된 파일에 캐시으로 객체를 할 때 먼저 읽고 또는 후에 기록되었고 다음을 추상화에서 멀리 프로그램의 나머지,정말 많은 하중에서도 CPU 이나 디스크 공간을 차지합니다.
그것은 꽤 읽을 수 있도로 당신 구조의 파일을 오른쪽.

모든 언어로 모든 플랫폼에서 지원하는 XML 일부를 통해 매우 일반적 라이브러리입니다.

@Herms

내가 정말 의미 있었에 충실하는 권장하는 방법으로 소프트웨어를 저장해야 합 configuration 값을 주는 플랫폼입니다.

당신은 종종 다음은 또한 권장하는 방법 이해야 합/수정할 수 있습니다.다음과 같은 설정 메뉴에서는 프로그램 또는 구성에서 패널"시스템의 환경 설정"응용 프로그램(시스템 서비스를 위한 소프트웨어 ie).를 허용하지 않습니다 최종 사용자 수정들을 통해 직접 모나 메모장...

왜?

  1. 최종 사용자(=고객에게)를 사용하여 그들의 플랫폼
  2. 시스템에 대한 백업할 수 있는 더 나은 저장"안전한 설정"등

@ninesided

에 대해" 의 선택 라이브러리 "도의 링크(정적 링크)어떤 선택한 라이브러리의 위험성을 줄이기 위하여 얻으로 버전쟁-전쟁에서 최종 사용자 기계입니다.

구성하는 경우 파일 write-once,read-only-에서 부팅하며,데이터는 무리의 이름 값 쌍으로,당신의 최선의 선택은 당신의 개발을 얻을 수 있는 일 처음이다.

경우에 데이터를 조금 더 복잡한,중첩 등을,당신은 아마 더 YAML,XML,또는 SQLite.

필요하신 경우 중첩된 데이터 및/또는 능력을 쿼리를 구성한 후 데이터를 부팅 XML 을 사용하거나 SQLite.모두 아주 좋은 질의어에 관한 연구(XPATH 및 SQL)에 대한 구조화/중첩된 데이터입니다.

구성하는 경우 데이터는 높은 표준화(예:5 번째 정상적인 형태로)당신은 더 나은 SQLite 기 때문에 SQL 은 더 나은 처리에 대한 높은 표준화 데이터입니다.

당신은 계획을 작성하여 구성 데이터를 설정하는 동안 프로그램 운영,당신은 더 나 SQLite.예를 들어,당신은 다운로드를 구성 데이터에서 다른 컴퓨터로,또는 당신의 기반으로 향후 프로그램 실행을 결정을 내릴 수집된 데이터에서 이전 프로그램 실행이 가능합니다.SQLite 를 구현하는 매우 강력한 데이터 저장소 엔진 것은 매우 어려운 손상이 있을 때 정전 또는 프로그램에서 걸리는 일관성이 없는 상태로 인하여 오류가 있습니다.부패 데이터 지도를 높드 지원 비용,그리고 SQLite 할 것입니다 훨씬 더 나은 어떤 것보다 가장 해결책 또는 인기있는 라이브러리를위 또는 XML YAML.

체크아웃 마이 페이지 에 대한 자세한 내용 SQLite.

내가 알기로는,Windows 레지스트리가 더 이상 원하는 방법으로 저장하는 구성에 사용하는 경우.NET-대부분의 응용 프로그램이 현재의 시스템입니다.구성[1,2].이것은 또한 XML 기반이 될 것으로 보인는 모든 것이 움직이는 방향으로의 사용에 대한 XML 구성이 있습니다.

을 유지하려는 경우 크로스-플랫폼에 내가 말하는 것을 사용하여 어떤 종류의 텍스트 파일이 될 것이 가장 좋은 경로 갈 수 있습니다.로서의 서식에 대한 말한 파일할 수 있습니다려는 경우 인가를 조작하거나지 않습니다.XML 것 같다 좀 더 친절하는 수동 조작상 INI 파일로 인해 표시되는 파일의 구조.

으로 각 부류는 세금 나는 그것에 대해 걱정하지 마세요 너무 자주 XML 라이브러리를 돌봐 추습니다.만 시간이 될 수 있는 고려 사항이 있는 경우 약간의 저장 공간을 일으로 모든 바이트 계산합니다.

[1]시스템입니다.네임스페이스 구성- http://msdn.microsoft.com/en-us/library/system.configuration.aspx

[2]응용 프로그램 구성 파일을 사용하여합니다.NET- http://www.developer.com/net/net/article.php/3396111

우리는 속성을 사용하여 파일이기 때문에,단순히 자바를 지원들이 자체적으로 제공합니다.몇 달 전에 나는 SpringSource 애플리케이션 플랫폼을 사용하 JSON 을 구성 서버 및 그것은 매우 흥미 롭습니다.나 에 비해 다양한 구성 표기 고 결론에 도달했는 XML 될 것으로 보인 가장 적합니다.그것은 좋은 도구를 지원하고 오히려 플랫폼 독립적입니다.

Re:epatel 의 댓글

내가 생각하는 원래의 질문에 대해 묻는 응용 프로그램 구성 관리자 하는 것,단지 사용자 환경설정을 저장하.제안 당신에게 보상을 위한 사용자 환경 설정이 이상 응용 프로그램 config,지 않은 일반적으로는 뭔가 사용하는 것이 이제까지 처리는 직접(응용 프로그램를 제공해야한 구성 옵션 UI 에서,및 그 후 업데이트 파일).나는 진짜로 당신을 희망하지 않겠다고 사용자를 보기/레지스트리 편집.:)

실제문,말할 것 XML 은 아마인으로 많은 사람들이 될 것입를 사용하여 사용하는을 위한 구성입니다.로 구성 configuration 값을 사용하기 쉬운 방식으로 다음"각 부류는 세금이"안됩니다.

아마 약간의 접 여기에 있지만 내 의견은 config 파일에 있어야으로 읽는 키 값을 사전/해시 테이블 앱이 처음 시작되고 항상 액세스를 통해 본체에서 다음에 대한 속도이다.일반적으로 키/값이블로 시작된열 그러나 도우미 기능을 개체에 같은 일을 할 DateTime GetConfigDate(string key)등

생각만 중요한 것은 선택하는 형식을 선호하고 빠르게 탐색 할 수 있습니다.록은 모두 정밀한 형식 설정하고 광범위하게 지원--기술 구현하지 않는 요점에서의 문제,밝기.그것은 100%에 대해 무엇의 작업 config 파일을 쉽게 당신입니다.

나는 사용하기 시작했 JSON 기 때문에,나는 꽤 작업으로 그것이 형식으로 데이터 전송,그리고 직렬화를 쉽게로 모든 개발 프레임 워크입니다.내가 찾 JSON 보다 쉽게 읽을 수 XML,하게 처리하는 여러 서비스,각각 사용하여 설정하는 파일을 수정 매우 자주,많은 꺼내 me!

플랫폼 작업을 하고 있습니까?력을 사용하여 선호/일반적인 방법입니다.

  1. MacOSX-plists
  2. Win32-레지스트리(수 있거나 새로운 중 하나는 여기에 오래 전부터 내가 개발한다)
  3. Linux/Unix~/.apprc(이름 값을 아마도)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top