У меня есть два класса
public class ClassA
{
public int ID { get; set; }
public string Countries {get;set;}
public string City { get;set; }
}
и
public class ClassB
{
public int ID { get; set; }
public string Countries {get;set;}
public string Village{ get;set; }
}
Эти два класса находятся в другом классе
public class ComponentClass
{
public List<ClassA> classAObj { get; set; }
public List<ClassB> classBObj { get; set; }
}
Данные для ComponentClass поступает от третьей стороны, где данные для ClassA и ClassB схожи по структуре. «Город» в ClassA будет иметь данные в значениях, разделенных запятыми «Манчестер, Сидней» и т. Д., Аналогично деревням и значениям, разделенным запятыми.
Сейчас я строюнастраиваемый объект на бизнес-уровне, где я перебираю каждое свойство ComponentClass и извлекаю информацию.
Main()
{
ComponentClass[] c = //Data from 3rd party;
foreach(var data in c)
{
Parent p = new Parent();
if(data.classAObj.count > 0)
{
Star s = new Star();
s.Area = "infinite";
s.Color = "red";
List<string> sep = data.City.Split(',').Select(string.Parse).ToList();
foreach(var b in sep)
{
TinyStar t = new TinyStar();
t.smallD = b;
s.Values.Add(t);
}
p.Curves.Add(s);
}
if(data.classBObj.count > 0)
{
Star s2 = new Star();
s2.Area = "infinite";
s2.Color = "red";
List<string> sep = data.Village.Split(',').Select(string.Parse).ToList();
foreach(var b in sep)
{
TinyStar t = new TinyStar();
t.smallD = b;
s2.Values.Add(t);
}
p.Curves.Add(s);
}
}
}
В приведенном выше коде два оператора if выполняют одну и ту же операцию, кроме имен свойств "City"и "Деревня".Я хочу упростить это, используя любой шаблон проектирования, возможно, шаблон стратегии, который я знаю только теоретически, или любые другие шаблоны.
Вот что я пробовал:
public abstract class Base
{
public int ID { get; set; }
public string Countries {get;set;}
}
public class ClassA : Base
{
public string City { get;set; }
}
public class ClassB : Base
{
public string Village{ get;set; }
}
Я хочусделать это как обычный метод фабрики, который будет делать циклы и построить объект для меня, чтобы избежать дублирования кода
public void CommonMethod(Base)
{
// How do I differentiate the properties for looping
}