【问题标题】:N Tier layer - load details into objectN 层 - 将细节加载到对象中
【发布时间】:2013-02-10 15:34:01
【问题描述】:

我使用以下结构创建了一个网站:

类项目 - 称为 DataAccessLayer > 添加了一个数据集 > 添加一个 tableAdapter 和 Datatable 以及一个名为 GetcustomersByID(ID) 的查询

类项目 - 称为 BusinessLayer > 创建了一些代码来调用 DataAccessLayer 并在 CustomerDataTable 中返回查询 GetcustomersByID(ID) 的结果

Web 项目 - 添加了对 BusinessLayer 的引用。

从这一点开始,我可以添加一个 ObjectDataSource 并将其绑定到业务层并调用适当的方法(在此示例中为 GetCustomersByID(ID))。

然后我想添加一个额外的层,我希望将所有客户数据加载到客户对象中。所以我添加了另一个名为 Customersclass 并将所有字段添加为 [B]properties [/B](CustomerID、FirstName、Surname、AddressOne 等)。

如何将 BusinessLayer 中的所有详细信息加载到此对象中,以便编写诸如

之类的代码
Dim myCustomer as Customer
....
...... Some code to get the data and load it into the Customer object.

If myCustomer.Firstname = "Bob" Then
....
End If

【问题讨论】:

  • 我不确定我是否理解这个问题。您想从数据访问对象映射到业务对象吗?
  • 我想知道的是如何加载带有返回结果的客户类,这样我就可以编写一些代码来查看客户名称是否为“Bob”或者我如何检查是否如果我无法将结果加载到一个类中,客户名称是 Bob?
  • 那么,你有一个数据表,你想把它映射到一个类?
  • 是的 - 没错。调用GetcustomersByID(ID)业务层方法时返回一个Datatable

标签: c# .net vb.net n-tier-architecture


【解决方案1】:

为了从数据表中提取数据,您可以执行以下操作:

Customer customer = dt.AsEnumerable().Select(row => 
        // construct and map all the properties
        new Customer
        {
            Id = row.Field<int>("Id"),
            Firstname = row.Field<string>("Name")
        }).FirstOrDefault();

在 VB.NET 中是这样的(虽然,我不是 VB 人):

Dim customer As Customer = dt.AsEnumerable().[Select](Function(row) New Customer() With     { _
    Key .Id = row.Field(Of Integer)("Id"), _
    Key .Firstname = row.Field(Of String)("Name") _
}).FirstOrDefault()

【讨论】:

    【解决方案2】:

    好吧,我不知道您希望这个应用程序的扩展性如何,但您可能需要考虑查看 Active Record 模式或域模型模式,以帮助决定如何构建您的层。

    您可以使用 DTO 或 POCO 对象代替填充数据表,并使用像 Dapper.NET 这样的 ORM 将数据直接填充到它们中。然后您可以使用 AutoMapper 从 DTO 填充您的业务对象。

    如果您使用 Active Record,您可以让您的业务对象直接调用数据并自行填充。

    你可以做无数不同的事情。

    此外,您可能不希望前端调用服务层或外观层,而不是直接调用您的业务逻辑。

    或者更好的是删除关系数据源并使用 RavenDB 或 Mongo 等文档数据库,并一起删除冗余层调用。存储灵活的数据对象而不是死板的行。然后您会发现填充您的业务对象将是一件轻而易举的事。

    【讨论】:

    • 有没有使用 DTO 方法的例子?或者即使你能给我举个例子?
    • 数据传输对象只是一个保存数据且没有逻辑的对象。它应该具有保存数据的属性。看看 Dapper 并阅读简单的教程。您将看到如何调用数据库,然后将数据映射到您的 DTO 对象。 github.com/SamSaffron/dapper-dot-net
    猜你喜欢
    • 2020-09-07
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多