2015-12-20 41 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