2012-02-28 4 views
1

다음 정의 from wikipedia은 다중 계층 응용 프로그램에서 데이터 액세스 계층이 무엇인지 설명합니다.DAL을 사용하여 응용 프로그램 구성에 액세스해야합니까?

데이터 액세스 계층 (DAL)은 은 데이터베이스와 같은 의 영구 저장 장치에 어떤 종류의 데이터 저장 단순화 액세스를 제공하는 컴퓨터 프로그램의 계층이다.

영구 저장소는 하나 이상의 파일로 구성 될 수도 있지만 상위 레이어는 파일의 정보를 어떻게 구성하는지 모릅니다. app.config 또는 web.config과 같은 구성 파일을 사용하는 응용 프로그램이 있다고 가정하면 app.config 파일에 일부 매개 변수 값 (예 : 캐시의 최대 크기)이있을 수 있으므로 응용 프로그램에서 이러한 값을로드해야합니다 시작. 또한 응용 프로그램에서 UI를 통해 이러한 매개 변수를 편집 할 수있는 경우 app.config 파일을 업데이트해야합니다. 이 작업은 DAL의 일부입니까?

답변

2

구성을 저장하고 검색하는 방법과 같은 특정 문제를 처리하는 데 부담을주지 않으므로 개별적으로 테스트하기가 쉽기 때문에 우려 사항을 구분할 필요가 있습니다.

필요한 구성 데이터의 모델을 만들고이 모델을 (생성자를 통해) 종속성으로 허용하거나 구성 데이터가 충분히 간단하면 구성 요소의 몇 가지 속성 일 수 있습니다 그 자체.

구성 정보를 전송하기 위해 모델을 만드는 경우 사용자가 구성 가능한 값과 상호 작용할 수 있도록 응용 프로그램 부분에서 해당 개체를 사용하는 것이 더 쉽습니다. 앱을 구성하기위한 UI는 자체적으로 별도의 기능입니다.

바보 같은 예입니다. 당신이 단위 테스트를 사용하는 경우

public class Settings 
{ 
    public string SettingOne { get; set; } 

    public bool SettingTwo { get; set; } 

} 

public class DAL 
{ 
    public Settings Settings { get; private set; } 

    public DAL(Settings settings) 
    { 

    } 
} 

그래서, 당신은 당신의 설정을 관리하는 조각으로 귀찮게하지 않고, 그것을 원하는 설정을 제공하여 바로 DAL을 테스트 할 수 있습니다 (아래 NUnit과 테스트의 경박 한 예이다).

[Test] 
public void Should_do_something_important() 
{ 
    // Arrange 
    var dal = new DAL(new Settings { SettingOne = "whatever", SettingTwo = true }); 

    // Act 
    var result = dal.DoSomethingImportant(); 

    // Assert 
    Assert.That(result, Is.Not.Null); 
} 

지금, 당신의 응용 프로그램에서, 당신은 설정을 관리하는 별도의 구성 요소 수 (당신이 그렇게 선택하면 ... 어쩌면 설정이 정말 매우 간단하며,이 추가 단계가 불필요을, 그것은 당신에게 달려 있습니다) , 당신은 그 자체로 완전히 테스트 할 수 있습니다.

public class SettingsManager 
{ 
    public Settings ReadSettings(string path) 
    { 
     // read from the store 

    } 

    public void WriteSettings(Settings settings, string path) 
    { 
     // write settings to the store 
    } 

} 

그리고 다른 경박 한 시험 : 응용 프로그램에서 이제

[Test] 
public void Should_write_settings_to_store() 
{ 
    // Arrange 
    var manager = new SettingsManager(); 

    // Act 
    var settings = new Settings { SettingOne = "value", SettingsTwo = true }; 
    manager.WriteSettings(settings, @"C:\settings\settings.config"); 

    // Assert 
    Assert.That(File.Exists(@"C:\settings\settings.config", Is.True)); 
} 

, 당신은 그들을 함께 가지고이 같은 작업을 수행 할 수 있습니다

protected DAL DAL { get; private set; } 

public void Init() 
{ 
     var manager = new SettingsManager(); 

     DAL = new DAL(manager.ReadSettings(@"C:\settings\settings.config")); 
} 

이 길을가는 이점은 지금 귀하의 DAL과 귀하의 관리 설정이 분리됩니다. 이제 두 부분을 독립적으로 빌드하고 테스트 할 수 있습니다. DAL이 DAL에 초점을두고, 설정 관리자가 설정 관리에 집중하십시오.

+0

앱을 구성하는 _UI는 자체적으로 별개의 기능입니다 ._ 의미하니? – enzom83

+1

응용 프로그램의 복잡성에 따라 UI를 작성하는 데 상당한 시간을 할애하여 응용 프로그램을 쉽게 설정하고 응용 프로그램이 발전하면 쉽게 업데이트 할 수 있습니다. 따라서 어느 정도는 소프트웨어를 구성하는 소프트웨어를 소프트웨어의 다른 기능과 동일한 방식으로 취급합니다. – HackedByChinese

+0

확인. 마지막으로, 당신은 무엇을 의미합니까? 필요한 구성 데이터의 모델을 생성하고이 모델을 (생성자를 통해) 종속으로 받아들이는 것이 현명 할 수 있습니다. – enzom83

관련 문제