如何使用 3 层架构填充组合框
How to populate a combobox using 3-tier architecture
我正在使用 3 层编写应用程序。
在表示层,我有一个组合框,我需要用一个简单的 SQL 填充,例如
SELECT distinct(Item) as items From ItemsTable order by items;
据我所知,表示层不应该知道项目列的名称。也许名称会在 DB 中更改,我不想更新整个应用程序,在最坏的情况下只更新 DAL。
我的问题是如何在不写列(项目)名称的情况下填充组合框
ItemsComboBox.DisplayMember = "items";
ItemsComboBox.DataSource = _businessLayer.GetListOfItems();
业务层:
public DataTable GetListOfItems()
{
return DataAccess.Instance.Retrieve("TableName", "items");
}
_businessLayer.GetListOfItems();
- 业务层应该查询数据层而不是数据库。
- 如果数据库发生变化,只有数据层会受到影响。
最好创建一个不会改变的业务实体并使用它
如果您不想手动创建它们,可以使用 AutoMapper 等工具。
你可以参考这个 MSDN
你应该定义一个class专门用于业务层和表现层之间的数据传输。这称为数据传输对象。将 DTO classes 中的属性重用与实体中的列名相同的命名不会有什么坏处。您的业务层方法将从数据库中获取数据,填充 DTO 并将其 return 传递给表示层中的调用方法。同一对象可用于传回数据。如果实体中的列名称发生变化,您可以在业务层修改数据库访问,而不会影响表示层。 Youtube 上有 Bob Tabor 的一些关于应用程序架构的精彩视频。他解释得很好。
我正在使用 3 层编写应用程序。
在表示层,我有一个组合框,我需要用一个简单的 SQL 填充,例如
SELECT distinct(Item) as items From ItemsTable order by items;
据我所知,表示层不应该知道项目列的名称。也许名称会在 DB 中更改,我不想更新整个应用程序,在最坏的情况下只更新 DAL。
我的问题是如何在不写列(项目)名称的情况下填充组合框
ItemsComboBox.DisplayMember = "items";
ItemsComboBox.DataSource = _businessLayer.GetListOfItems();
业务层:
public DataTable GetListOfItems()
{
return DataAccess.Instance.Retrieve("TableName", "items");
}
_businessLayer.GetListOfItems();
- 业务层应该查询数据层而不是数据库。
- 如果数据库发生变化,只有数据层会受到影响。
最好创建一个不会改变的业务实体并使用它
如果您不想手动创建它们,可以使用 AutoMapper 等工具。
你可以参考这个 MSDN
你应该定义一个class专门用于业务层和表现层之间的数据传输。这称为数据传输对象。将 DTO classes 中的属性重用与实体中的列名相同的命名不会有什么坏处。您的业务层方法将从数据库中获取数据,填充 DTO 并将其 return 传递给表示层中的调用方法。同一对象可用于传回数据。如果实体中的列名称发生变化,您可以在业务层修改数据库访问,而不会影响表示层。 Youtube 上有 Bob Tabor 的一些关于应用程序架构的精彩视频。他解释得很好。