使用SOLID设计模式在单个类中添加多个类数据

时间:2015-11-25 23:41:59

标签: c# solid-principles

我有ProductItem1Item2类。目标是将产品类中的所有项目合并到一个列表中,以便对它们进行排序和 显示在客户端的网站上。我希望在C#中使用SOLID原则

public class Product
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
        public string Type { get; set; }
    }
and here are list of datas are in this class
-- var list1 = new List<Item1>();
public class Item1
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
    }
-- var list2 = new List<Item2>();
public class Item2
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
    }

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

使用ViewModel处理您的显示问题。这尊重单一责任原则。 ViewModel的职责是显示数据并验证用户填写的<form>输入(如果有)。要显示的数据可以从许多来源汇总。

使用持久化实体/域实体/数据传输对象与ViewModel之间的映射。定义从每个源类到ViewModel的映射。强烈建议使用诸如AutoMapper之类的库。

例如:

public class ProductDetailsViewModel {
    // Display attribute as an example of a view concern
    [Display(Name = "ProductDetails_Name", ResourceType = typeof(Resources))]
    public string Name {get; set;}
}

public class ProductListViewModel {
    public IEnumerable<ProductDetailsViewModel> ProductDetails {get; set;}
}


// Example of mapping by hand:
var item1 = new Item1();
var item2 = new Item2();
var vm1 = new ProductDetailsViewModel { Name = item1.Name };
var vm2 = new ProductDetailsViewModel { Name = item2.Name };
var productList = new ProductListViewModel {ProductDetails = new [] {vm1, vm2}}; 

答案 1 :(得分:0)

假设您要覆盖产品的值以及具有子项列表,我建议您将要覆盖的值声明为虚拟,并使另一个类可用,也可以将项列表作为必要时,继承父产品表。

name@domain.com

来自MSDN:

虚拟属性的行为类似于抽象方法,但声明和调用语法的差异除外。 在静态属性上使用虚拟修饰符是错误的。 通过包含使用override修饰符的属性声明,可以在派生类中重写虚拟继承属性。