我正在渲染一个随新ViewModel()提供的Create.cshtml。在我提交表单之前,我想使用Ajax来计算价格。我的视图模型不知道如何计算,也不想复制功能。此行为基于封装原因驻留在域模型中。
使用Ajax,我想打电话给'计算'控制器上的操作方法,在完成表单本身之前(在创建域模型之前)为用户提供总价格。
如何在不破坏封装的情况下实现此功能?
注意:在此过程的后期,DomainModel将用于在购物篮/付款/处理之前计算。
public class DomainModel
{
public int Id { get; set; }
public int Quantity { get; set; }
public decimal Price { get; set; }
public decimal Calculate()
{
return Quantity*Price;
}
}
public class ViewModel
{
[Required]
public int Id { get; set; }
[Required]
public int Quantity { get; set; }
public decimal Price { get; set;
}
答案 0 :(得分:1)
您可以利用接口扩展,然后让每个扩展都实现特定的接口。例如:
public interface MyAwesomeInterface
{
int Quantity { get; }
decimal Price { get; }
}
然后:
public class DomainModel : MyAwesomeInterface
public class ViewModel : MyAwesomeInterface
最后:
public static class MyAwesomeInterfaceExtensions
{
public static Calculate(this MyAwesomeInterface foo)
{
return foo.Quantity * foo.Price;
}
}