一点关注的分离是明智的,因为它使您可以更轻松地进行测试,因为它们不需要处理特定问题,例如配置的存储位置和检索方式。
建立你需要的配置数据的模型并接受这个模型作为依赖(通过构造函数)是合理的,或者如果配置数据足够简单,它可以是组件上的一些属性本身。
在创建模型以传输配置信息的情况下,您可以更容易地在应用程序的一部分中使用该对象,从而允许用户与可配置值进行交互。 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