如何在UI,BLL,DAL之间使用DTO

Oli*_*ver 5 c# dns user-interface data-access-layer bll

我正在尝试编写一个在BLL和DAL之间有非常严格的边界的小应用程序,现在我想知道在层之间传递数据(域传输对象)的最佳方法是什么.

我在一个域级(类库)中实现了一些由BLL和DAL访问的类.这些类基本上只包含属性/数据成员,并且当前反映DAL数据.例如:

class CustomerData
{
  // some data fields
}
Run Code Online (Sandbox Code Playgroud)

然后我在BLL中实现了一些类:

class Customer : CustomerData
{
  // Some methods
}
Run Code Online (Sandbox Code Playgroud)

在我的DAL中,我通过Linq-to-Sql从数据库中获取客户记录.然后我通过以下方式将linq对象映射到我的Domain对象:

CustomerData.field = LinqObject.field
// Etc
Run Code Online (Sandbox Code Playgroud)

因此,我的想法是,当我请求时,我现在是一个从DAL到BLL的CustomerData实例(并且我应该将Customer实例传递给我的UI).

因此,在我的BLL中,我将收到一个CustomerData实例,但现在我想让客户摆脱它.

问题:

  1. 我现在必须在我的BLL中创建一个Customer实例并且AGAIN复制所有字段成员吗?
    客户c =新客户; c.field = CustomerData.field;
  2. 如何在没有字段复制步骤的情况下从CustomerData创建客户?
  3. 我应该更喜欢使用构图吗?
    class Customer {CustomerData Data; }
  4. 在我当前的布局中有没有更有效的方法(更少编码等)?
  5. 有没有更好的方法来做到这一点?
  6. 一般的评论?

谢谢 !

Dea*_*bit 8

通常我认为DTO是非特定层的,由DAL创建/使用,由BLL处理并由UI消费/创建.

通常每个图层都是VS解决方案文件夹中的一个单独项目,因此DTO是另一个由每个图层引用的项目.

这样,如果某个字段需要存在于UI中而不存在于其他图层中,则可以继承DTO.