2012-02-28 47 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

相關問題