2013-04-09 4 views
0

Я хотел бы знать лучший способ передачи данных между слоями (например: пользовательские классы, Dataset, DataReader ..).Лучший способ передачи данных между слоями

Давайте рассмотрим шаблон проектирования MVP. Я хотел бы знать лучший способ переноса данных с уровня модели на уровень презентатора.

+4

Нужна дополнительная информация. Здесь почти нет. –

+0

Рассмотрим шаблон проектирования MVP. Я хотел бы знать лучший способ переноса данных с уровня модели на уровень презентатора. –

ответ

2

Вы можете использовать либо

  • DTO/Business Objects (BO)

    Они Plain Old CLR Object (POCO), что обычно не содержит никакой логики (или, может быть минимальной, чтобы преобразовать DTO в BO, чтобы отменить сравнение или toString).

    Например, если вы создаете нового сотрудника, у вас есть класс под названием EmployeeBO для передачи данных. Пользовательский интерфейс захватывает данные из формы, создает BO и затем отправляет этот BO в BLL (Business Logic Layer). Этот BLL делает все, что он считает необходимым, и в конечном итоге отправляет BO на уровень доступа к данным, который сохраняется в БД.

    Использование BO в BLL Layer помогает, потому что вы имеете дело с реальными объектами здесь, вы можете хранить их в списках, словарях ... вы можете использовать LINQ для доступа к нему, даже в конечном итоге иметь структуру ORM или Microsoft Entity Framework.

  • DataSets

    похожие на предыдущий. Его преимущество - главный недостаток. Он сильно связан с db. Не используйте его.

  • DataReader

    Если вы когда-либо рассмотреть вопрос об использовании DataReaders, пойти на DataSets :-)

  • Параметры

Проходите все параметры вниз от слоя к МЕ BLL и DAL. Это непрактично.

Лучшим из них является DTOs/Business Objects. Идеально использовать DTO для связи от уровня пользовательского интерфейса до BLL и сделать BLL использовать свои собственные объекты BO. Если вы этого не сделаете (я сделал), ваш пользовательский интерфейс сочетается с уровнем доступа к данным, что усложняет внесение изменений в backend. Разделение его между DTO и BOs дает вам преимущество в том, что вы не связаны. Обычно у вас есть метод, который преобразует DTO в его BO.

0

Лучший способ передачи данных - объекты DTO.

Эти объекты содержат только переменные экземпляра (с сеттерами и геттерами) в качестве данных, которые вы хотите передать!

не должно быть никаких поведения в этом классе

, например, если вы хотите передать данные студентов, выполните следующие действия

class StudentBean 
{ 
private String name; 
private String age; 

public void setName(String n) 
{ 
name=n; 
} 

public String getName() 
{ 
return name; 
} 


public void setAge(int n) 
{ 
age=n; 
} 

public int getAge() 
{ 
return age; 
} 

} 

теперь вы можете создать StudentBean класс, заполнять данные в случае переменные, а затем передать этот объект в качестве параметра на другой уровень!

+0

ну, иногда это так, но иногда это не так. нет ни одного наилучшего решения, иначе все остальное не имеет смысла. –

0

Я думаю, что наиболее удобный способ зависит от того, как реализован ваш уровень представления (WPF, ASP.NET, ASP.NET MVC, WinForms ...).

Наличие связки DTOs является типичной и обычно хорошей реализацией, но вы также можете использовать анонимные типы. Я уже дал аналогичный ответ здесь: Is it good practice to pass TempData and/or ViewData to services?.

Пример в этом ответе показывает, как бизнес-объекты сопоставляются с анонимными типами, которые затем используются в уровне представления. Конечно, эти анонимные типы действуют как DTO, с разницей, что вам не нужно явно их объявлять. Кроме того, в нем делается предположение, что у вас есть модель с бизнес-объектами, которые представляют ваше состояние приложения.

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