2015-12-20 2 views
0

Я пишу приложение, используя 3-уровневый слой.Как заполнить combobox, используя 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. Он объясняет все это очень хорошо.

+0

В соответствии с вашей эксплоанизацией, может ли быть решение? DataTable dataTable = _items.GetListOfItems(); ItemsComboBox.DisplayMember = dataTable.Columns [0] .ColumnName; ItemsComboBox.DataSource = dataTable; – ehh

+0

Да, вы можете использовать datatable для DTO. –

1
_businessLayer.GetListOfItems(); 
  • Бизнес слой должен запрос слоя данных, а не БД.
  • При изменении базы данных будет влиять только уровень данных.

Это лучше, чтобы создать бизнес-объект, который не будет изменять и использовать его

Вы можете использовать какой-то инструмент, как AutoMapper, если вы не хотите, чтобы создать их вручную.

Вы можете обратиться в этот MSDN

Смежные вопросы