使用扩展方法将一个类映射到另一个类是否合适

时间:2014-03-04 02:42:42

标签: c# extension-methods

刚刚尝试使用扩展方法,我正在开发一些映射逻辑,将应用程序Invoice转换为Quickbooks Invoice。认为拥有.Convert()扩展方法可能是个好主意。

public static QBInvoice Convert(this InvoiceHeader importedInvoice)

转换只是一个类到另一个类的字段映射。但后来我在某处读到一个扩展方法是扩展原始类,而不是将其转换为另一个类。因此我要问的原因。我在技术上知道我能做到,但这是最佳实践合规还是禁忌?

3 个答案:

答案 0 :(得分:5)

我个人喜欢使用显式强制转换:

public class InvoiceHeader
{
   public static explicit operator QBInvoice(InvoiceHeader invoice)
   {
      return new QBInvoice {}; // do your mapping
   }
}

然后你可以施展它:

var qbInvoice = (QBInvoice) invoiceHeader;

答案 1 :(得分:2)

我们一直使用它来映射类...可能不是最好的解决方案,但至少你可以在远处隐藏无聊的代码,并使重要的代码(你的业务逻辑)变得美观和可读。

我必须强烈不同意上面的Blogbeard评论:类之间的映射与类本身(SRP)无关,因此将该代码放在两个类之外是更清晰的解决方案。

答案 2 :(得分:2)

一种广为接受的类转换方法,定义为扩展方法是ToArray()AsEnumerableToListToDictionary是其他广为接受的“转化”扩展方法。

“To”或“As”似乎是可接受的转换为另一种类型的扩展方法的命名约定,就像“On”是事件的标准命名约定的一部分一样。