这个类和它内部的另一个类集合如何更好地编写/设计,当前的实现有什么问题

本文关键字:设计 什么 实现 问题 更好 内部 另一个 集合 何更好 | 更新日期: 2023-09-27 18:07:07

class A
{
    public int MyProperty { get; set; }
    public List<B> B { get; set; }
}

 class B
{
    public int MyProperty { get; set; }
    public string MyProperty1 { get; set; }
    public static List<B> CreateB(int [] parameter, string str, int number)
    {
        var bList = new List<B>();
        foreach (var item in parameter)
        {
            var b = new B();
            b.MyProperty = number;
            b.SetProperty1(str);
            bList.Add(b);
        }
        return bList;
    }
    private void SetProperty1(string s)
    {
        //logic here applied to 's'
        this.MyProperty1 = s;
    }
}

class Program
{
    static void Main(string[] args)
    {
        int id = 123;
        int [] array = new int[] { 1, 2, 3 };
        var A = DataBase.GetListOfA(id);
        UpdateB(A, array);
    }
    public static void UpdateB(List<A> data, int[] numbers)
    {
        var array = new int[] {5,10,15};
        var str = "hi";
        var number = 1;
        foreach (var item in data)
        {
            if(item.B == null || item.B.Count == 0)
            {
                item.B = new List<B>();
                item.B = B.CreateB(array, str, number);
            }
            else
            {
                //B.UpdateB(/*parameters here*/);
            }
        }
    }
}

类B与A直接相关,但不能在A内部,因为每个A的类B的数量是动态的和变化的。

我不知道如何寻求帮助,但类B不应该使用静态方法创建自己的列表?

如果可能的话,B应该与A分开吗?或者我可以简单地在填充A内部属性的方法中创建B吗?

例如:创建a方法,它需要一些参数来设置a中的每个属性,从而也在该方法中创建B ?

这个类和它内部的另一个类集合如何更好地编写/设计,当前的实现有什么问题

在一个方法中创建B,该方法填充a的属性。

例如Create a方法,它接受一些参数来设置a中的每个属性从而也在该方法中创建B

那就是我要做的。这是一种与单一责任原则更紧密结合的方法。B不需要知道它是数组中的一个元素,它只需要表示B对象。A知道它包含B s的列表,因此它应该管理该列表

我时间紧迫,所以我将提供关于你问题的这一部分的建议:"我不确定如何寻求帮助,但是类B不应该使用静态方法创建自己的列表吗?"

我会让CreateB只返回一个B。如果你有一堆参数,你需要做的B(例如,一个int型数组),那么我会使用LINQ像这样:

List<B> theBees = parameter.Select(param => B.CreateB(param, str, number)).ToList();

vladimir Khorikov在他优秀的Pluralsight c#函数式编程课程中谈到了构造函数。查看vladimir在这个Email类上定义的Create方法。我认为这是一个超级干净的方式来处理对象的创建和验证