onnodb
그는 물었다 12 tahun yang lalu
2

액세스하도록 글로벌 애플리케이션 설정

39 는 모든 데이터베이스 응용 프로그램을 I& 주력하고, m, 각종 설정을 config. 데이터베이스. 이들은 대부분 사용자정의하려면 there& # 39, s 도 있지만, 특정 업무 규칙을 발생합니까 설정을 일부 다른 물건을 안에 있다.

특히 특정 작업을 할 수 있는 애플리케이션 객체 포함, 예를 들면, 특정 복잡한 계산. 그 뿐만 아니라, 그 많은 개체가 유닛 테스트 비사양 ᅴ 액세스해야 하는 글로벌 꾸미기야. # 39 는 지금 이 we& 운행에서어떠한, ve 구현됩니까 제공하여 응용 프로그램에서 접수됨 않는비즈니스 속성를 객체에는 컨트롤러거 dell. 런타임용으로 개발하십시오. 그리고 테스트 테스트 및 채우고 있는 객체를 생성할 때 값을 테스트 (아닌 데이터베이스입니까).

이 기능은 더 좋고, 어떤 경우든 내가 긁어줄게 것보다 그 모든 객체에는 효과적으로 할 수 있는 것은 물론 일부 글로벌 Settings 객체에는 - 유닛 테스트:) 가끔 불이익을 받을 수 있는지 설정하지 않아도 그 속성을 & # 39 개 등록 정보, 또는 수 있도록 필요한 percolate& # 39;; salesforce. 하위 개체.

  • 따라서 일반 질문은 *: 어떻게 액세스하도록 프로젝트에서 글로벌 응용 프로그램 설정 없이 글로벌 변수, 동시에 받을 수 있으므로 단위 테스트 코드에? 반드시 # 39, s, s # 39 번 100& that& 문제가 해결되었다.

(참고: # 39 m not i&, 너무 많은 것을 갖고 있기 때문에, 숙련된 프로그래머용 you& # 39, ll. 하지만 난 사랑을 배우고! 물론 I& # 39, ve 아직 조사를 일부 가장 먼저 확보할 수 있지만, 이 항목에서는 I& # 39 m 정말 찾고 경험을)

답변 4 개

내 구성 액세스만 오프하도록 로케이터를 패턴화합니다 서비스 모델 싶어요. 이 날 가져올 수 있는 단일 가리키십시오 구성값 데릭쉐퍼드와 및 응용 프로그램 및 테스트용 재사용합니다 위부의 배치하여 별도의 라이브러리란 있습니다. 다음은 잘 모르는 일부 샘플 코드를 사용하고 있지만, 나는 내가 그 C # 언어를 썼다.

우선 내가 모델을 만들 수 있는 일반 클래스 내 콘피그라티온이테마.

public class ConfigurationItem<T>
{
    private T item;

    public ConfigurationItem(T item)
    {
        this.item = item;
    }

    public T GetValue()
    {
        return item;
    }
}

그럼 내가 공용 정적 클래스 변수를 만들 표시하는 readonlyfrom 구성 항목. Here I am 에서 xml 파일을 바로 읽을 수 있는 코너스티언스트라이스팅스 구성용 뿐입니다. 물론 자세한 항목, 다양한 소스로부터 값뿐 읽을 수 있습니다.

public class ConfigurationItems
{
    public static ConfigurationItem<ConnectionStringSettings> ConnectionSettings = new ConfigurationItem<ConnectionStringSettings>(RetrieveConnectionString());

    private static ConnectionStringSettings RetrieveConnectionString()
    {
        // In .Net, we store our connection string in the application/web config file.
        // We can access those values through the ConfigurationManager class.
        return ConfigurationManager.ConnectionStrings[ConfigurationManager.AppSettings["ConnectionKey"]];
    }
}

I need a, I call it 사용할 때 보라그들은 콘피그라티온이테마 다음과 같습니다.

ConfigurationItems.ConnectionSettings.GetValue();

다음 날, 내가 할 수 있는 안전 및 it 반환되므로 캐시에는 또는 내가 원하는 것은 무엇이든지 할 가치 있는 유형.

39 의 here& 샘플 테스트:

[TestFixture]
public class ConfigurationItemsTest
{
    [Test]
    public void ShouldBeAbleToAccessConnectionStringSettings()
    {
        ConnectionStringSettings item = ConfigurationItems.ConnectionSettings.GetValue();
        Assert.IsNotNull(item);
    }
}

ᄋ "이번 도움이 됩니다.

마틴 사냥군 세르비셀로카토르 패턴화합니다 사용할 수 있습니다. Php 에서 수 있다는 점에서 다음과 같습니다.

class ServiceLocator {
  private static $soleInstance;
  private $globalSettings;

  public static function load($locator) {
    self::$soleInstance = $locator;
  }

  public static function globalSettings() {
    if (!isset(self::$soleInstance->globalSettings)) {
      self::$soleInstance->setGlobalSettings(new GlobalSettings());
    }
    return self::$soleInstance->globalSettings;
  }
}

그러면 다음과 같은 코드를 초기화되는지 로케이터를 서비스 운영

ServiceLocator::load(new ServiceLocator());

In your 테스트 코드를 전날에약혼자에게 삽입하십시오 조룽 설정 다음과 같습니다.

ServiceLocator s = new ServiceLocator();
s->setGlobalSettings(new MockGlobalSettings());
ServiceLocator::load(s);

39 의 싱글 교환할 수 있는 리포지토리를 it& 대한 테스트를 위해.

내가 이런게야:

public class MySettings
{
    public static double Setting1
        { get { return SettingsCache.Instance.GetDouble("Setting1"); } }

    public static string Setting2
        { get { return SettingsCache.Instance.GetString("Setting2"); } }
}

I put 이 문제에 대한 별도의 인프라스트럭처로 모듈에서는 분리하십시오 사용순환 종속물과의. 이렇게 하면 특정 구성 방법, I am not 직결됨 문장열 피해가 없고 내 애플리케이션 코드 실행.

일반적으로 이것은 처리됩니까 ini 파일이나 XML 에 의해 구성파일입니다. 그럼 그냥 투명지에 클래스를 설정할 때 판독합니다 네이트.

.NET 에 이 기능이 내장됨 콘피그라티온만거 it& # 39, s 클래스, 그러나 매우 쉽게 구축할 수 있는 텍스트 파일, 또는 로드 XML DOM 으로 읽는 구문 분석, 또는 그 손에 의해 제거되었다.

이 구성 파일 데이터베이스에서 않지만,) 은 데이터베이스에 대한 의존성 추가로 만들 수 있는 앱을 너회가 타이법으로요 ini / xml 파일 pardiso.