在层之间传输数据的最佳方式

本文关键字:最佳 方式 数据 传输 之间 | 更新日期: 2023-09-27 18:08:26

我想知道在层之间传输数据的最佳方法(例如:自定义类,Dataset, DataReader ..)。

让我们考虑MVP设计模式。我想知道将数据从模型层传输到演示层的最佳方法。

在层之间传输数据的最佳方式

您可以使用

  • DTO/业务对象(BO)

    它们是普通的旧CLR对象(POCO),通常不包含逻辑(或者可能最小到转换DTO在BO中,覆盖比较或toString方法)。

    例如,如果您正在创建一个新员工,您有一个名为EmployeeBO的类来帮助传输数据。用户界面从表单中获取数据,创建BO,然后将此BO发送给BLL(业务逻辑层)。这个BLL做他认为需要的任何事情,并最终将BO发送给数据访问层,数据访问层将其保存在DB中。

    在BLL层中使用BO是有帮助的,因为你在这里处理的是真实的对象,你可以将它们存储在列表,字典…你可以使用LINQ来访问它,甚至最终有一个ORM框架或微软实体框架。

  • 数据集

    与上一个类似。它的优点是主要缺点。它与db高度耦合。

  • DataReader

    如果你曾经考虑使用数据阅读器,去DataSets:-)

  • 参数

您将所有参数从IU层向下传递到BLL和DAL。这是不实际的。

最好的是dto/Business Objects。理想情况下,使用DTO从UI层与BLL通信,并使BLL使用自己的BO对象。如果您没有这样做(我就是这样做的),那么您的UI与数据访问层相结合,使得后端更改变得复杂。将它拆分为dto和bo,可以避免耦合。通常,您在某处有一个方法可以将DTO转换为它的BO。

传输数据的最佳方式是DTO对象。

这些对象只包含实例变量(带有setter和getter)作为您想要传输的数据!

这个类中不应该有任何行为

例如,如果您想传递学生数据,请执行以下操作

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类,在它的实例变量中填充数据,然后将这个对象作为参数传递给其他层!

我想最方便的方法取决于你的表示层是如何实现的(WPF, ASP. js)。净,ASP。. NET MVC, WinForms…).

拥有一堆dto是一种典型且通常很好的实现,但您也可以使用匿名类型。我已经在这里提供了一个类似的答案:将TempData和/或ViewData传递给服务是好的做法吗?

答案中的示例显示了如何将业务对象映射到匿名类型,然后在表示层中使用匿名类型。当然,这些匿名类型充当dto,不同之处在于您不必显式声明它们。此外,它假设您有一个模型,其中的业务对象表示应用程序状态。