C# 如何使用三层体系结构填充组合框

C# 如何使用三层体系结构填充组合框,c#,winforms,data-access-layer,n-tier-architecture,3-tier,C#,Winforms,Data Access Layer,N Tier Architecture,3 Tier,我正在编写一个使用3层的应用程序 在表示层中,我有一个组合框,我需要用一个简单的SQL来填充它,例如 SELECT distinct(Item) as items From ItemsTable order by items; 好吧,表示层不应该知道项目列的名称。也许名称将在DB中更改,我不想更新整个应用程序,在最坏的情况下,只更新DAL 我的问题是,如何在不必写入列(项)名称的情况下填充组合框 业务层: public DataTable GetListOfItems() {

我正在编写一个使用3层的应用程序

在表示层中,我有一个组合框,我需要用一个简单的SQL来填充它,例如

SELECT distinct(Item) as items From ItemsTable order by items;
好吧,表示层不应该知道项目列的名称。也许名称将在DB中更改,我不想更新整个应用程序,在最坏的情况下,只更新DAL

我的问题是,如何在不必写入列(项)名称的情况下填充组合框

业务层:

public DataTable GetListOfItems()
    {
        return DataAccess.Instance.Retrieve("TableName", "items");
    }
  • 业务层应该查询数据层,而不是数据库
  • 如果数据库发生变化,只有数据层会受到影响
最好创建一个不会改变并使用它的业务实体

如果不想手动创建它们,可以使用一些工具,如


您可以在

中引用这一点。您应该专门为业务层和表示层之间的数据传输定义一个类。这称为数据传输对象。对DTO类中的属性重新使用与实体中的列名相同的命名不会有什么坏处。您的业务层方法将从数据库获取数据,填充DTO并将其返回到表示层中的调用方法。同一对象可用于传回数据。如果实体中的列名发生更改,则可以在业务层中修改数据库访问权限,而不影响表示层。youtube上有一些Bob Tabor关于应用程序架构的精彩视频。他很好地解释了这一切。

业务层中为该元素指定的名称是什么。,?根据您的解释,以下是解决方案吗?DataTable DataTable=_items.GetListOfItems();ItemsComboBox.DisplayMember=dataTable.Columns[0]。ColumnName;ItemsComboBox.DataSource=dataTable;是的,您可以为DTO使用数据表。
public DataTable GetListOfItems()
    {
        return DataAccess.Instance.Retrieve("TableName", "items");
    }
_businessLayer.GetListOfItems();