我有一个模型
public class Product : BaseEntity
{
private string _name;
public string Name
{
get { return _name; }
private set{_name = value;}
}
public decimal Price { get; set; }
public double Weight { get; set; }
public double Width { get; set; }
public double Height { get; set; }
public double Depth { get; set; }
public DateTime DateAdded { get; set; }
...
public string GeneralInfo {get{//some get logic}...}
}
和一个视图模型:
public sealed class ProductDetailsModel
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public double Weight { get; set; }
public double Width { get; set; }
public double Height { get; set; }
public double Depth { get; set; }
...
public string GeneralInfo {get;set;}
}
和控制器:
public class ProductController : Controller
{
...
public ActionResult Details(int id)
{
var product = _productRepository.GetProduct(id);
var productViewModel = Mapper.Map<ProductDetailsModel>(product);
return View(productViewModel);
}
...
}
一切都很好,但是......我有一些产品模型一般信息属性的获取逻辑,它从数据库中获取这个一般信息,有时,当产品没有一般信息时,这个属性返回 null。我需要的是从可用属性(例如 With、Height 等)生成替代的一般信息。例如:
private string GenerateGeneralInfoFromProductProperties()
{
var generalInfoStringBuilder = new StringBuilder();
generalInfoStringBuilder.Append(@"<b>Width: </b>").Append(Width).Append("</br>");
generalInfoStringBuilder.Append(@"<b>Weight: </b>").Append(Weight).Append("</br>");
...
return generalInfoStringBuilder.ToString();
}
如果我将此逻辑添加到产品模型中...
public class Product : BaseEntity
{
...
public string GeneralInfo
{
get
{
var gInfo = getGeneralInfoFromBD();
if (gInfo==null)
gInfo = GenerateGeneralInfoFromProductProperties();
return gInfo;
}
set { SetPropertyValue(ProductPropertyType.GeneralInfo, value); }
}
}
一切正常,但这是错误和不合逻辑的,因为我有一个用于表示产品细节的视图模型,所以我想将此逻辑添加到视图模型,但我的视图模型实例是由映射器创建的,产品视图模型没有构造函数传递产品实例以获取它的一般信息,因为正如我所说,它在构造函数中不需要。如何将此“一般信息如果为空”替换逻辑添加到映射器或视图模型?