[英]JSON/XML serialization: Ignore/include some fields from the base class
您应该使用特定于当前操作的DTO,然后将数据从DTO复制到您要使用的实际对象。
这样做的好处是您可以定义特定于此操作的验证,并且您将没有业务对象的属性。 您可以为每个新DTO的每个操作使用不同的验证规则,并仍然使用相同的业务对象。
如果您不想编写映射代码以从DTO映射到业务对象,则可以使用AutoMapper 。
示例代码:
public enum ColourType
{
Flat,
Metallic
}
public class Car
{
public void Repaint(int red, int green, int blue, ColourType colourType)
{
// TODO: Add some validation logic and business logic.
}
}
public class RepainInMetallicModel
{
[Required]
[Range(0, 100)]
public int Red { get; set; }
[Required]
[Range(0, 100)]
public int Green { get; set; }
[Required]
[Range(0, 100)]
public int Blue { get; set; }
}
public class RepaintInFlatModel
{
[Required]
[Range(0, 255)]
public int Red { get; set; }
[Required]
[Range(0, 255)]
public int Green { get; set; }
[Required]
[Range(0, 255)]
public int Blue { get; set; }
}
public class CarController
{
public ActionResult RepaintInMetallic(RepainInMetallicModel model)
{
if (ModelState.IsValid)
{
var car = _carsRepository.Find(model.Id);
var.Repaint(model.Red, model.Green, model.Blue, ColourType.Metallic);
_carsRepository.Save(car);
}
return View();
}
public ActionResult RepaintInFlat(RepaintInFlatModel model)
{
if (ModelState.IsValid)
{
var car = _carsRepository.Find(model.Id);
var.Repaint(model.Red, model.Green, model.Blue, ColourType.Flat);
_carsRepository.Save(car);
}
return View();
}
}
以下示例未演示AutoMapper的用法,但它确实演示了DTO的用法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.