0

在我的项目中,每个域模型都有一个视图模型,并在多个视图中重用此视图模型。

一种视图模型的示例

 public class ProductViewModel
    {
        public int ProductId { get; set; }
        public int ProductGroupId { get; set; }
        public bool IsLinkedToErp { get; set; }

        [Required(AllowEmptyStrings = false)]
        [Display(Name = "Standard")]
        public bool IsDefault { get; set; }

        [MaxLength(50)]
        [Required(AllowEmptyStrings = false)]
        [Display(Name = "Artnr")]
        public string ArtNo { get; set; }

        [MaxLength(255)]
        [Required(AllowEmptyStrings = false)]
        [Display(Name = "Beskrivning")]
        public string Description { get; set; }

        [MaxLength(255)]
        [Required(AllowEmptyStrings = false)]
        [Display(Name = "Specifikation")]
        public string Specification { get; set; }

        [MaxLength(5)]
        [Required(AllowEmptyStrings = false)]
        [Display(Name = "Enhet")]
        public string Unit { get; set; }

        [MaxLength(4)]
        [Required(AllowEmptyStrings = false)]
        [Display(Name = "Konto")]
        public string Account { get; set; }

        [Required(AllowEmptyStrings = false)]
        [Display(Name = "Netto")]
        public decimal NetPrice { get; set; }

        public string ChUser { get; set; }

        public DateTime ChTime { get; set; }

        public string GetUpdatedDate
        {
            get { return String.Format("{0:d}", ChTime); }
        }

        public string GetNetPrice
        {
            get { return String.Format("{0:0.00}", NetPrice); }
        }
    }

我在 ProductController 中的所有视图都重用了这个 ViewModel。对于列表,添加和编辑。但在列表中,我只使用了所有属性中的一些。

然后我使用 Automapper 映射到域,反之亦然。

现在我想知道是否有人有这方面的经验。随着项目的发展,您认为我在使用此解决方案时会遇到问题吗?

4

1 回答 1

3

我会考虑拆分 ListViewModel 和 Add/Edit 视图模型,因为您可能会填充和发送比视图实际需要的更多的数据。

通过利用继承,您可以快速创建两个仅包含视图所需数据的类。根据您的示例,我将考虑以下内容:

public class ProductListViewModel{
    public IEnumerable<ProductListModel> products {get;set;}

    public string SomeOtherPotentialVariableForProductList {get;set;}
}

public class ProductListModel{
    public int ProductId { get; set; }

    public int ProductGroupId { get; set; }

    [MaxLength(255)]
    [Required(AllowEmptyStrings = false)]
    [Display(Name = "Beskrivning")]
    public string Description { get; set; }

    [Required(AllowEmptyStrings = false)]
    [Display(Name = "Netto")]
    public decimal NetPrice { get; set; }
}

public class ProductViewModel : ProductListModel
    {

        public bool IsLinkedToErp { get; set; }

        [Required(AllowEmptyStrings = false)]
        [Display(Name = "Standard")]
        public bool IsDefault { get; set; }

        [MaxLength(50)]
        [Required(AllowEmptyStrings = false)]
        [Display(Name = "Artnr")]
        public string ArtNo { get; set; }

        [MaxLength(255)]
        [Required(AllowEmptyStrings = false)]
        [Display(Name = "Specifikation")]
        public string Specification { get; set; }

        [MaxLength(5)]
        [Required(AllowEmptyStrings = false)]
        [Display(Name = "Enhet")]
        public string Unit { get; set; }

        [MaxLength(4)]
        [Required(AllowEmptyStrings = false)]
        [Display(Name = "Konto")]
        public string Account { get; set; }

        public string ChUser { get; set; }

        public DateTime ChTime { get; set; }

        public string GetUpdatedDate
        {
            get { return String.Format("{0:d}", ChTime); }
        }

这完成了一些事情。

  1. 您只发送视图所需的数据。
  2. 如果您发现自己需要更多可能与产品不直接相关的列表视图信息,您可以快速添加该属性。
  3. 通过从 ProductListModel 继承,您不会在代码中重复自己。
于 2013-01-11T08:39:46.610 回答