使用SOLID设计模式在单个类中添加多个类数据
本文关键字:数据 添加 SOLID 设计模式 单个类 使用 | 更新日期: 2023-09-27 18:24:18
我有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; }
}
如有任何帮助,我们将不胜感激。
假设您想要覆盖product的值以及子项列表,我建议您将要覆盖的值声明为虚拟值,并使另一个类可用,该类也可以根据需要获取项列表,同时从父product表继承。
public class Product
{
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
public virtual string Type { get; set; }
}
public class ProductFull : Product
{
public override Guid Id { get; set; }
public override string Name { get; set; }
public override string Type { get; set; }
public List<Item1> Item1s { get; set; }
public List<Item2> Item2s { get; set; }
}
public class Item1
{
public Guid Id { get; set; }
public string Name { get; set; }
}
public class Item2
{
public Guid Id { get; set; }
public string Name { get; set; }
}
来自MSDN:
虚拟属性的行为类似于抽象方法,只是声明和调用语法不同。在静态属性上使用虚拟修饰符是错误的。通过包含使用重写修饰符的属性声明,可以在派生类中重写虚拟继承属性。
使用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}};