使用C#扩展方法的DTO映射器

时间:2011-03-02 14:26:59

标签: c#-4.0 c#-3.0 domain-driven-design extension-methods dto

将DTO映射器的成员(大多数情况下是静态类)定义为扩展方法是不是一个好主意?

然后而不是写作:

Affiliate bo = Mapper.FromDataTransferObject(dto);

我们可以写:

Affiliate bo = dto.FromDataTransferObject();

FromDataTransferObject是下面定义的扩展方法:

public static Affiliate FromDataTransferObject(this AffiliateDto dto) {

if (dto == null) {
    return null;
}

var bo = new Affiliate() {
    Id           = dto.Id,
    AccountAlias = dto.AccountAlias,
    Balance      = dto.Balance
    // ...
};

return bo; 

}

2 个答案:

答案 0 :(得分:3)

除了命名问题之外,它没有任何根本性的错误,并且它在代码所在的位置允许良好的SOC,同时仍然提供良好的API。

那就是说,你应该考虑重命名你的功能。通常,函数是从目标(在本例中为您的DTO)的角度命名的,而不是从结果的角度命名。在您的情况下,我会将其命名为ToAffiliateToBusinessObject(如果您希望在DTO中使用一致的名称),而不是FromDataTransferObject

答案 1 :(得分:1)

我没有看到它的问题,它有助于可用性和可读性,并且手头的任务也没有任何副作用。我自己也用过它。