2010-08-25 26 views
1

一个简单的LINQ to SQL查询可能返回一个产品对象。有意义的是,我可以将这个对象传递给我的业务层,然后直接读取并更新数据。在哪些情况下,我想创建从Linq到Sql结果的自定义业务对象?

我见过一堆实现,其中执行linq查询后,生成的对象被映射(通过automapper或手动)到自定义业务对象。所以,在我可能有LINQ对象产品的情况下:

product.ProductId 和 Product.ProductName

,然后我会定义一个定制产品业务对象,像这样:

class BusineszProduct 
{ 
    string ProductId; 
    string ProductName; 
} 

和一些简单的映射代码,如:

BusinessProduct myProduct = new BusinessProduct(); myProduct.ProductId = product.ProductId; myProduct.ProductName = product.ProductName;

然后将myProduct传递给我的业务层,修改它,读取它等等,然后更新linq对象。

在什么情况下我想创建自定义BusinessProduct类?

回答

2

恕我直言,一般的原因是将Linq2SQL实体附带的Linq2SQL ORM行李中的商业实体分开/解开

然而,在极端情况下,可能有多个映射:

  • LINQ2SQL实体的“数据访问”层 - 但是,这些是紧耦合到L2S的DataContext
  • 波苏斯/业务实体会用于业务规则应用程序验证等
  • 如果您使用的是Web服务或WCF,那么您也可以将数据表示为消息实体,例如如果您需要提供实体在一个非常特定的格式,当他们跨线连载
  • 最后,如果你有一个MVC/MVP/MVVM的UI架构,你可能要为你的意见量身定制实体
+0

第1部分 - 很好的答案。子句1 - 即使是Linq to Sql也能完全感觉b/c如果我使用存储库模式,但是如果我创建了另一个图层,这个对象映射,我可以更容易地将我的数据存储更改为一个nosql数据库。#2 - Linq和MVC好像有很多本机验证支持,所以我不确定这个注册是否有w/me。 – Emilio 2010-08-25 22:46:35

+0

第2部分#3 - 为什么我可能希望通过导线与使用Linq对象的特定格式来表示数据?#4 - 使总体感觉。我读过你应该有1: 1视图与支持该视图的模型之间的映射,因此在将模型数据从控制器传递到视图之前进行映射是有意义的。另一个替代方法是为每个视图创建一个Linq查询。我的意见是有道理的? – Emilio 2010-08-25 22:47:44

+0

当然 - 这是一个极端的例子 第2点 - 模拟点,但是在N层SOA堆栈中,使用DI等组件引用您的DAL似乎是不对的。 第3点 - 如果您已承诺向消费者发布特定的XSD/WSDL合约,那么您确实需要对xmnls,元素vs属性,名称等进行良好的级别控制。但是,如果消费者在您自己的控制之下,通常不需要这样做(例如,您自己的客户端/ Ajax或类似) – StuartLC 2010-08-26 07:19:27

0

在我的应用程序中,我执行了一个连接六个不同表的Linq查询,并提供了来自每个表的几列。没有与该组信息匹配的特定于表格的对象类型。因此,我创建了一个自定义业务类来处理记录集。

您可以自己查看它(http://www.njtheater.org

我从Productions表按日期选择。它加入到播放表(我得到标题&说明),Troupes表(我得到剧院公司名称),Venues表(我得到剧院名称&城市)。 Plays表加入到PlayCredits表中,该表加入People表(我从中获得剧作家的姓名)

+0

你说,“没有与该组信息匹配的特定于表的对象类型,因此我创建了一个自定义业务类来处理记录集。“你的意思是你创建了一个像我上面的BusinessProduct类一样的自定义对象,或者你的Linq结果实际上是一个自定义业务类? – Emilio 2010-08-25 22:54:24

+0

我为此目的创建了一个特定的类,很大程度上是因为我需要做一些后处理它在显示信息之前,并且匿名类中的属性是只读的。 – 2010-08-26 11:02:57