Java 애플리케이션의 설정을 유지하는 간단한 방법은 특정 값과 연관된 각 설정의 ID를 포함하는 ".properties"확장자를 가진 텍스트 파일로 표시됩니다 (이 값은 숫자, 문자열, 날짜 등일 수 있음). . C #은 비슷한 방법을 사용하지만 텍스트 파일의 이름은 "App.config"여야합니다. 두 경우 모두 소스 코드에서 설정을 읽기 위해 특정 클래스를 초기화해야합니다.이 클래스에는 지정된 설정 식별자와 연관된 값 (문자열)을 반환하는 메서드가 있습니다.
// Java example
Properties config = new Properties();
config.load(...);
String valueStr = config.getProperty("listening-port");
// ...
// C# example
NameValueCollection setting = ConfigurationManager.AppSettings;
string valueStr = setting["listening-port"];
// ...
두 경우 모두 구성 파일에서로드 된 문자열을 구문 분석하고 변환 된 값을 관련 유형이 지정된 객체에 할당해야합니다 (이 단계에서 구문 분석 오류가 발생할 수 있음). 구문 분석 단계 후 설정 값이 특정 유효 도메인에 속하는지 확인해야합니다. 예를 들어 대기열의 최대 크기는 양수 값이어야하며 일부 값은 관련이있을 수 있습니다 (예 : min <max ), 등등.
응용 프로그램이 시작하자마자 설정을로드해야한다고 가정합니다. 즉, 응용 프로그램이 수행하는 첫 번째 작업은 설정을로드하는 것입니다. 설정에 대한 유효하지 않은 값은 기본값으로 자동 대체되어야합니다. 이것이 관련 설정 그룹에 발생하면 해당 설정은 모두 기본값으로 설정됩니다.
이러한 작업을 수행하는 가장 쉬운 방법은 먼저 모든 설정을 구문 분석 한 다음로드 된 값을 확인하고 마지막으로 기본값을 설정하는 방법을 만드는 것입니다. 그러나이 방법을 사용하면 유지 관리가 어려워집니다. 응용 프로그램을 개발하는 동안 설정 수가 늘어 나면 코드를 업데이트하기가 점점 어려워집니다.
이 문제를 해결하기 위해 다음과 같이 템플릿 방법 패턴 을 사용하려고 생각했습니다 .
public abstract class Setting
{
protected abstract bool TryParseValues();
protected abstract bool CheckValues();
public abstract void SetDefaultValues();
/// <summary>
/// Template Method
/// </summary>
public bool TrySetValuesOrDefault()
{
if (!TryParseValues() || !CheckValues())
{
// parsing error or domain error
SetDefaultValues();
return false;
}
return true;
}
}
public class RangeSetting : Setting
{
private string minStr, maxStr;
private byte min, max;
public RangeSetting(string minStr, maxStr)
{
this.minStr = minStr;
this.maxStr = maxStr;
}
protected override bool TryParseValues()
{
return (byte.TryParse(minStr, out min)
&& byte.TryParse(maxStr, out max));
}
protected override bool CheckValues()
{
return (0 < min && min < max);
}
public override void SetDefaultValues()
{
min = 5;
max = 10;
}
}
문제는 이런 식으로 단일 값에 대해서도 각 설정에 대해 새 클래스를 만들어야한다는 것입니다. 이런 종류의 문제에 대한 다른 해결책이 있습니까?
요약해서 말하자면:
- 손쉬운 유지 보수 : 예를 들어 하나 이상의 매개 변수 추가.
- 확장 성 : 응용 프로그램의 첫 번째 버전은 단일 구성 파일을 읽을 수 있지만 이후 버전은 다중 사용자 설정 가능성을 제공 할 수 있습니다 (관리자가 기본 구성을 설정하고 사용자는 특정 설정 만 설정할 수 있음 등).
- 객체 지향 디자인.