我有Product
,Item1
和Item2
类。目标是将产品类中的所有项目合并到一个列表中,以便对它们进行排序和
显示在客户端的网站上。我希望在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; }
}
任何帮助都将不胜感激。
答案 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修饰符的属性声明,可以在派生类中重写虚拟继承属性。