2016-12-13 5 views
0

App.config 파일을 사용하여 응용 프로그램 전체에서 사용되는 매개 변수를 저장하는 응용 프로그램이 있습니다. 매개 변수는 파일 이름, 경로 및 유사한 것을 나타냅니다. 다음과 같은구성 파일에서 읽은 매개 변수를 처리하는 올바른 방법은 무엇입니까?

주요 통화 같습니다

1) 다음과 같은 별도의 클래스를 사용 :

public class ExtractorParams 
{ 
    public static string InputCsvFile 
    { 
     get { return ConfigurationManager.AppSettings["InputCsvFile"]; } 
    } 

    public static string SheetName 
    { 
     get { return ConfigurationManager.AppSettings["SheetName"]; } 
    } 

    public static string EventFolder 
    { 
     get { return ConfigurationManager.AppSettings["EventFolder"]; } 
    } 

    public static string BlobFolder 
    { 
     get { return ConfigurationManager.AppSettings["BlobFolder"]; } 
    } 

    public static string OutputCsvFile 
    { 
     get { return ConfigurationManager.AppSettings["OutputCsvFile"]; } 
    } 

    public static string MissingFiles 
    { 
     get { return ConfigurationManager.AppSettings["MissingFiles"]; } 
    } 
} 

을 그리고 위와 같이 필요할 때 사용

CsvExtractor.ExtractDataAndCopyFiles(); 

... 

public class CsvExtractor 
{ 
    public static void ExtractDataAndCopyFiles() 
    { 
     var eventList = DataReader.ReadInputCsvFile(ExtractorParams.InputCsvFile, ExtractorParams.SheetName); 
     DataWriter.WriteOutputCsvFile(
      ExtractorParams.OutputCsvFile, 
      CreateExtractData(eventList), 
      ExtractorParams.EventFolder, 
      ExtractorParams.BlobFolder, 
      ExtractorParams.MissingFiles); 
    } 

    ... 
} 

올바른 방법은 무엇입니까 .

또는 :

2) 다음과 같은 매개 변수의 배열을 사용하여

CsvExtractor.ExtractDataAndCopyFiles(list_of_params); 

... 

public class CsvExtractor 
{ 
    public static void ExtractDataAndCopyFiles(params string[] list) 
    { 
     ... 
    } 

    ... 
} 
+1

"올바른"대답은 없습니다. 의견 만 있습니다. 일부는 매개 변수의 수를 줄이기 위해 콜렉션을 선호합니다. 다른 사람들은 명확한 매개 변수를 선호하므로 함수가 제대로 작동하는 데 필요한 것이 무엇인지 명확하게 알 수 있습니다. –

+0

또한 설정 이름을 수정할 때 첫 번째 방법을 사용하면 한 곳에서 수정해야합니다. –

답변

0

옵션 1) +1 하지만 내 프로젝트에서 우리는이

public class AppSettingsManager : IAppSettingsManager 
{ 
    private static string filesFolder; 

    public static string FilesFolder 
    { 
     get 
     { 
      if (filesFolder == null) 
      { 
       filesFolder = filesFolder = ConfigurationManager.AppSettings["FilesFolder"]; 
      } 

      return filesFolder; 
     } 
    } 
} 

같은 우리가 정적 변수에 설정 파일에서 값을 저장했다. 필요하다면이 변수에서 얻습니다.

0

내가 그러나 조금 트와) 옵션 1을 좋아합니다. 앱을 사용하고 있다는 사실을 분리합니다 설정 모델과 그것의 인구를 분리함으로써

public class CsvConfig 
{ 
    public string Opt1 { get; set; } 
    public string Opt2 { get; set; } 
    //.... 
} 

로더

public class Config 
{ 
    public CvsConfig Csv { get; private set; } 

    public Config() 
    { 
     Csv = new CsvConfig 
     { 
      // load stuff from where ever 
     } 
    } 
} 

:

설정을 포함해야 모델을 만들 수 있습니다. 구성 설정. 테스트 등을 생각할 때 유용합니다. 정적 인 것들을 사용하지 않고 더 많은 의존성 주입 접근법을 사용하는 경우에만 물론 작동합니다.