隐式运算符会使 DTO 变臭吗?
Would implicit operators make DTOs smelly?
我正在从事的项目有:
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 的映射。
根据Dolor
,MyObjectSummaryDTO.Lipsum
中的值应该是Lorem
或Ipsum
。
在其中一个 DTO 上添加隐式运算符是否会破坏 DTO 的模式?我可以扩展 AutoMapper 以包含此逻辑吗?我不想添加另一个层只是为了从对象中获取外观。
不,您不想在自动映射器配置中隐藏此功能。我保证在未来的某个时候,另一个程序员会对这个突然变化的值感到非常困惑。
相反,提供一个 GetLipsum() 函数,其中包含用于确定要 return 的值的业务逻辑。这样查找 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; }
}
我正在从事的项目有:
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 的映射。
根据Dolor
,MyObjectSummaryDTO.Lipsum
中的值应该是Lorem
或Ipsum
。
在其中一个 DTO 上添加隐式运算符是否会破坏 DTO 的模式?我可以扩展 AutoMapper 以包含此逻辑吗?我不想添加另一个层只是为了从对象中获取外观。
不,您不想在自动映射器配置中隐藏此功能。我保证在未来的某个时候,另一个程序员会对这个突然变化的值感到非常困惑。
相反,提供一个 GetLipsum() 函数,其中包含用于确定要 return 的值的业务逻辑。这样查找 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; }
}