一點關注的分離是明智的,因爲它使您可以更輕鬆地進行測試,因爲它們不需要處理特定問題,例如配置的存儲位置和檢索方式。
建立你需要的配置數據的模型並接受這個模型作爲依賴(通過構造函數)是合理的,或者如果配置數據足夠簡單,它可以是組件上的一些屬性本身。
在創建模型以傳輸配置信息的情況下,您可以更容易地在應用程序的一部分中使用該對象,從而允許用戶與可配置值進行交互。 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內容,設置管理器將重點放在管理設置上。
_UI來配置你的應用程序本身是一個獨立的功能._你是什麼意思? – enzom83 2012-02-28 00:31:52
正因如此,根據應用程序的複雜性,您可能會花費大量時間編寫UI,以便您的應用程序易於設置,並且隨着應用程序的發展,您可以輕鬆進行更新。因此,在某種程度上,您將軟件配置爲與軟件中其他功能相同的軟件。 – HackedByChinese 2012-02-28 00:43:46
好的。最後,你的意思是什麼_創建你需要的配置數據的模型可能是明智的,並接受這個模型作爲依賴(通過構造函數)_? – enzom83 2012-02-28 09:55:05