隐性运营商会让DTO臭吗?

时间:2015-05-19 12:39:18

标签: automapper dto

我正在研究的项目有:

public class MyObjectDTO
{
    public string Lorem { get; set; }
    public string Ipsum { get; set; }
    public string Dolor { get; set; }
}
public class MyObjectSummaryDTO
{
    public string Lipsum { get; set; }
}

我有一张从MyObjectDTO到MyObjectSummaryDTO的地图。

取决于DolorMyObjectSummaryDTO.Lipsum中的值应为LoremIpsum

在其中一个DTO上添加隐式运算符会破坏DTO的模式吗?我可以扩展AutoMapper以包含此逻辑吗?我不想再添加另一层来获取对象的外观。

1 个答案:

答案 0 :(得分:1)

不,您不希望在您的automapper配置中隐藏此功能。我保证在未来的某个时候,另一个程序员会对这个突然变化的价值感到非常困惑。

相反,提供一个GetLipsum()函数,该函数包含用于确定要返回哪个值的业务逻辑。这样,找出Lipsum值来自何处的流程仍然存在于程序的执行路径中。

一般来说,我会在ViewModel和Model中发言,但我不确定你的摘要是否是ViewModel。无论哪种方式,业务逻辑都应该驻留在您的模型层中。

public class MyObjectDTO
{
    public string Lorem { get; set; }
    public string Ipsum { get; set; }
    public string Dolor { get; set; }
    public string GetLipsum() { //Automapper smartly maps this automatically to Lipsum
         return Dolor == "Amet" ? "Lorem" : "Ipsum";
    }
}
public class MyObjectSummaryDTO
{
    public string Lipsum { get; set; }
}