2015-12-20 42 views
0

我正在使用3層圖層編寫應用程序。如何使用3層體系結構填充組合框

在表示層,我有一個組合框,我需要用一個簡單的SQL如

SELECT distinct(Item) as items From ItemsTable order by items; 

AFAIK來填充,表示層應該不知道有這個項目列的名稱。也許這個名字會在數據庫中更改,我不想更新整個應用程序,最壞的情況下只有DAL。

我的問題是如何填充組合框,而無需編寫列(項目)

ItemsComboBox.DisplayMember = "items"; 
ItemsComboBox.DataSource = _businessLayer.GetListOfItems(); 

業務層的名稱:

public DataTable GetListOfItems() 
    { 
     return DataAccess.Instance.Retrieve("TableName", "items"); 
    } 
+0

在業務層中爲該元素分配的名稱是什麼? – Steve

回答

1

你應該明確定義一個類數據業務層和表現層之間的轉移。這被稱爲數據傳輸對象。 DTO類中的屬性重複使用相同的命名作爲實體的列名是不會傷害的。您的業​​務層方法將從數據庫獲取數據,填充DTO並將其返回到表示層中的調用方法。同一個對象可以用來傳回數據。如果實體中的列名稱發生更改,則可以修改業務層中的數據庫訪問權限,而不影響表示層。 YouTube Tabor上的應用程序架構上有一些很棒的視頻。他解釋得很好。

+0

根據你的exaplanation,以下可以解決嗎? DataTable dataTable = _items.GetListOfItems(); ItemsComboBox.DisplayMember = dataTable.Columns [0] .ColumnName; ItemsComboBox.DataSource = dataTable; – ehh

+0

是的,您可以使用DTO的數據表。 –

1
_businessLayer.GetListOfItems(); 
  • 業務層應查詢數據層而不是數據庫。
  • 只有數據庫更改時,數據層纔會受到影響。

這是更好地創建一個不會改變,並用它

你可以使用一些工具,如AutoMapper如果你不想手動創建一個業務實體。

您可以參考這MSDN