2012-02-28 55 views
1

以下定义from wikipedia解释了多层应用程序中的数据访问层应该使用DAL访问应用程序的配置吗?

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

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

回答

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内容,设置管理器将重点放在管理设置上。

+0

_UI来配置你的应用程序本身是一个独立的功能._你是什么意思? – enzom83 2012-02-28 00:31:52

+1

正因如此,根据应用程序的复杂性,您可能会花费大量时间编写UI,以便您的应用程序易于设置,并且随着应用程序的发展,您可以轻松进行更新。因此,在某种程度上,您将软件配置为与软件中其他功能相同的软件。 – HackedByChinese 2012-02-28 00:43:46

+0

好的。最后,你的意思是什么_创建你需要的配置数据的模型可能是明智的,并接受这个模型作为依赖(通过构造函数)_? – enzom83 2012-02-28 09:55:05