以下定义from wikipedia解释了多层应用程序中数据访问层的含义。
数据访问层(DAL)是计算机程序的一层 提供对存储在持久存储中的数据的简化访问 某种,比如数据库。
持久存储也可以包含一个或多个文件,但上层不知道我是如何组织文件中的信息的。假设我们有一个使用配置文件的应用程序,例如app.config
或web.config
:app.config
文件中可能存在某些参数的值(例如最大值缓存),因此必须在应用程序启动期间加载这些值。此外,如果应用程序允许通过UI编辑这些参数,则应更新app.config
文件。这些操作是否是 DAL 的一部分?
答案 0 :(得分: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内容,设置管理器专注于管理设置。