如何使用3层架构填充组合框

时间:2015-12-20 08:36:05

标签: c# winforms data-access-layer n-tier-architecture 3-tier

我正在使用3层图层编写应用程序。

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

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

AFAIK,表示层不应该知道项目列的名称。也许名称将在DB中更改,我不想更新整个应用程序,在最坏的情况下只有DAL。

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

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

业务层:

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

2 个答案:

答案 0 :(得分:1)

_businessLayer.GetListOfItems();
  • 业务层应该查询数据层而不是数据库。
  • 如果数据库更改,则只会影响数据层。

最好创建一个不会改变和使用它的商业实体

如果您不想手动创建它们,可以使用AutoMapper 之类的工具。

您可以在MSDN

中提及此内容

答案 1 :(得分:1)

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