是否应使用DAL访问应用程序的配置?

时间:2012-02-28 00:09:32

标签: c# .net multi-tier

以下定义from wikipedia解释了多层应用程序中数据访问层的含义。

  

数据访问层(DAL)是计算机程序的一层   提供对存储在持久存储中的数据的简化访问   某种,比如数据库。

持久存储也可以包含一个或多个文件,但上层不知道我是如何组织文件中的信息的。假设我们有一个使用配置文件的应用程序,例如app.configweb.configapp.config文件中可能存在某些参数的值(例如最大值缓存),因此必须在应用程序启动期间加载这些值。此外,如果应用程序允许通过UI编辑这些参数,则应更新app.config文件。这些操作是否是 DAL 的一部分?

1 个答案:

答案 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内容,设置管理器专注于管理设置。