一个简单的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类?
第1部分 - 很好的答案。子句1 - 即使是Linq to Sql也能完全感觉b/c如果我使用存储库模式,但是如果我创建了另一个图层,这个对象映射,我可以更容易地将我的数据存储更改为一个nosql数据库。#2 - Linq和MVC好像有很多本机验证支持,所以我不确定这个注册是否有w/me。 – Emilio 2010-08-25 22:46:35
第2部分#3 - 为什么我可能希望通过导线与使用Linq对象的特定格式来表示数据?#4 - 使总体感觉。我读过你应该有1: 1视图与支持该视图的模型之间的映射,因此在将模型数据从控制器传递到视图之前进行映射是有意义的。另一个替代方法是为每个视图创建一个Linq查询。我的意见是有道理的? – Emilio 2010-08-25 22:47:44
当然 - 这是一个极端的例子 第2点 - 模拟点,但是在N层SOA堆栈中,使用DI等组件引用您的DAL似乎是不对的。 第3点 - 如果您已承诺向消费者发布特定的XSD/WSDL合约,那么您确实需要对xmnls,元素vs属性,名称等进行良好的级别控制。但是,如果消费者在您自己的控制之下,通常不需要这样做(例如,您自己的客户端/ Ajax或类似) – StuartLC 2010-08-26 07:19:27