What is the best practices to pass data from presentation to application layer?Currently I have something like this:in presentation layer:the controller:public class ProductController : Controller{    private readonly IProductService _productService;    public ProductController(IProductService productService)    {        _productService = productService;    }    public ActionResult ProductCreateAction(ProductCreateViewModel vm)    {        _productService.CreateProduct(vm);        return Json(new { Ok = true });    }}and the view model:public class ProductCreateViewModel : ICreateProductCommand{    public string Name { get; set; }    public int Price { get; set; }}in application layer:public class ProductService : IProductService{    public void Create(ICreateProductCommand command)    {        var product = new Product(command.Name, command.Price);        //... add to repositoey and call SaveChanges ...    }}public interface ICreateProductCommand{    string Name { get; set; }    int Price { get; set; }}(using FluentValidation here)public class CreateProductCommandValidator : AbstractValidator<ICreateProductCommand>{    public CreateProductCommandValidator()    {        RuleFor(x => x.Name)            .NotEmpty();        RuleFor(x => x.Price)            .NotEmpty();    }}Is it ok to continue using this approach or there are better practices?Is it better to have one save action in controller or separate create/update actions?i.e.:public ActionResult Save(SomeViewModel vm){    if(vm.Id.HasValue)    {        //update    }    else    {        //create    }} vs.public ActionResult Create(SomeViewModel vm){    //create}public ActionResult Update(SomeViewModel vm){    //update}
Is this appropriate way to pass data from presentation to application layer?
c#;mvc;asp.net mvc 3