0

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

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

4

3 回答 3

2

你可以使用

  • DTO / 业务对象 (BO)

    它们是普通的旧 CLR 对象 (POCO),通常不包含任何逻辑(或者可能是在 BO 中转换 DTO、覆盖 compare 或 toString 方法的最低限度)。

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

    在 BLL 层中使用 BO 会有所帮助,因为您在这里处理的是真实对象,您可以将它们存储在列表、字典中……您可以使用 LINQ 访问它,甚至最终拥有 ORM 框架或 Microsoft Entity Framework。

  • 数据集

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

  • 数据读取器

    如果您曾经考虑使用 DataReaders,请选择 DataSets :-)

  • 参数

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

最好的一个是 DTO/业务对象。理想情况下,使用 DTO 从 UI 层与 BLL 进行通信,并使 BLL 使用自己的 BO 对象。如果你没有这样做(我做到了),那么你的 UI 与数据访问层相结合,使后端的更改变得复杂。在 DTO 和 BO 之间拆分它会给您带来不耦合的优势。通常你有一个方法可以将 DTO 转换成它的 BO。

于 2013-04-09T09:35:03.463 回答
0

传输数据的最佳方式是 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 类,在其实例变量中填充数据,然后将此对象作为参数传递给其他层!

于 2013-04-09T09:38:03.347 回答
0

我想最方便的方法取决于您的表示层是如何实现的(WPF、ASP.NET、ASP.NET MVC、WinForms...)。

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

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

于 2013-04-09T09:44:38.423 回答