【问题标题】:How to evade writing a lot of repetitive code when mapping?映射时如何避免编写大量重复代码?
【发布时间】:2011-05-31 08:44:29
【问题描述】:

我有一个使用实体框架的数据访问层 (DAL),我想使用 Automapper 与上层通信。作为每个方法的第一个操作,我必须将数据传输对象 (DTO) 映射到实体,处理我的输入,然后继续从实体映射到 DTO。如果不写这段代码,你会怎么做?

作为一个例子,看这个:

//This is a common method in my DAL
public CarDTO getCarByOwnerAndCreditStatus(OwnerDTO ownerDto, CreditDto creditDto)
{
    //I want to automatize this code on all methods similar to this
    Mapper.CreateMap<OwnerDTO,Owner>();
    Mapper.CreateMap<CreditDTO,Credit>();
    Owner owner = Mapper.map(ownerDto);
    Owner credit = Mapper.map(creditDto)

    //... Some code processing the mapped DTOs

   //I want to automatize this code on all methods similar to this 

   Mapper.CreateMap<Car,CarDTO>();
   Car car = Mapper.map(ownedCar);
   return car;
}

【问题讨论】:

  • 你能举一些你试图避免编写的重复代码的例子,以及它夹在中间的对象吗?
  • 你的dtos和entities有什么区别吗?
  • 是的。实体是实体对象,DTO 是 POCO。它们具有相同的参数,但 POCO 具有类似于可以创建实体的集合的 POCO 集合。
  • 不要写重复的代码,就是这样

标签: c# design-patterns automapper architectural-patterns


【解决方案1】:

我会使用代码生成来生成重复代码。

【讨论】:

  • 我对你的回答投了反对票,因为你没有解释你将如何解决这个问题。说代码生成器解决了问题是因为它会自动生成重复的代码,这是显而易见的……(如果我是刻薄的,请见谅)
  • @JPCF:不需要任何借口。我通常被称为卑鄙的人;-)
  • @JPCF:另外,我不知道你要从什么开始。如果您有一个好的模型可以用来生成代码,那么请使用T4 Template。如果没有,那么您将需要一些其他技术,否则,创建一个好的模型。
  • 这里的问题是每个方法都有不同的签名,这意味着不可能以通用的方式编写代码......我正在考虑使用反射机制,如“读取输入,看进去,然后用automapper……”不过好像太难了……
  • @JPCF:首先,重构该代码以将“重复”代码仅放在一个或两个位置(可能是方法)。然后看看代码生成。特别是,我从您的其他问题中看到您正在使用 EF4。您可以选择从 EF 概念模型生成任意代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-02
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 2011-03-22
相关资源
最近更新 更多