我想知道在层之间传输数据的最佳方法(例如:自定义类,数据集,DataReader ..)。
让我们考虑MVP设计模式。我想知道将数据从模型层传输到presenter层的最佳方法。
答案 0 :(得分:2)
您可以使用
DTO / Business Objects(BO)
它们是Plain Old CLR Object (POCO),通常不包含逻辑(或者可能是最小的转换BO中的DTO,以覆盖比较或toString方法)。
例如,如果您要创建新员工,则可以使用名为EmployeeBO的类来帮助传输数据。用户界面从表单捕获数据,创建BO,然后将此BO发送到BLL(业务逻辑层)。这个BLL会做他认为需要的任何事情,并最终将BO发送到数据访问层,并将其持久存储在数据库中。
在BLL Layer中使用BO有帮助,因为你在这里处理真实对象,你可以将它们存储在Lists,Dictionaries中......你可以使用LINQ来访问它,甚至最终有一个ORM框架或Microsoft Entity Framework。
<强>数据集强>
与之前类似。它的优点是它的主要缺点。它与db高度耦合。不要使用它。
<强>的DataReader 强>
如果您考虑使用DataReaders,请转到DataSet: - )
参数
您将所有参数从IU层传递到BLL和DAL。这是不切实际的。
最好的是DTO / Business Objects 。理想情况下,使用DTO从UI层与BLL进行通信,并使BLL使用自己的BO对象。如果你没有这样做(我做了),那么你的UI与数据访问层相结合,使得后端的变化变得复杂。在DTO和BO之间拆分可以为您提供不耦合的优势。通常你有一个方法可以将DTO转换为它的BO。
答案 1 :(得分: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类,在其实例变量中填充数据,然后将此对象作为参数传递给其他层!
答案 2 :(得分:0)
我想最方便的方法取决于你的表示层的实现方式(WPF,ASP.NET,ASP.NET MVC,WinForms ......)。
拥有一堆DTOs是典型且通常很好的实现,但您也可以使用匿名类型。我在这里已经提供了类似的答案:Is it good practice to pass TempData and/or ViewData to services?。
该答案中的示例显示了业务对象如何映射到随后在表示层中使用的匿名类型。当然,这些匿名类型充当DTO,区别在于您不必明确声明它们。此外,它假设您的模型具有代表您的应用程序状态的业务对象。