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

本文关键字:数据 添加 SOLID 设计模式 单个类 使用 | 更新日期: 2023-09-27 18:24:18

我有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; }
    }

如有任何帮助,我们将不胜感激。

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

假设您想要覆盖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}};