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?
答案 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。我认为这是一种处理对象创建和验证的超级干净方式。