如何在其中包含其他类集合的类更好地编写/设计,以及当前实现有什么问题?

时间:2016-09-15 02:24:02

标签: c# .net architecture

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.

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

2 个答案:

答案 0 :(得分:1)

  

在填充A内部属性的方法中创建B.

     

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

这就是我要做的。这是与Single Responsibility Principle更紧密对齐的方法。 B不需要知道它是数组中的一个项,它只需要表示B个对象。 A知道它包含B的列表,因此它应该管理该列表。

答案 1 :(得分:1)

我的时间很短,所以我会就你问题的这一部分提出一个建议:“我不确定如何就这个问题寻求帮助,但是B类不应该使用a来创建自己的列表静态方法?“

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

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

Vladmir Khorikov在他出色的Pluralsight C#函数式编程课程中谈到了构造函数。 Check out the Create method Vladmir defines on this Email class。我认为这是一种处理对象创建和验证的超级干净方式。