Доброго дня.
Подскажите как правильно произвести рефакторинг следующих методов и возможно ли их упрощение для дальнейшего применения?
Имеем следующий "абстрактный базовый" класс:
public class BaseCar
{
public int Position { get; set; } // номер стояночного места
public int Box {get; set;} //номер гаража
}
от него наследуем 2 и более других классов
//Самосвалы
public class Tipper : BaseCar
{
public int Capacity { get; set; }
}
// Автобусы
public class Autobus : BaseCar
{
public int MaxPeople {get;set;}
}
Эти классы становятся частью класса гараж
public class Garage
{
public List<Autobus> autobus_list {get; set;};
public List<Tipper> tipper_list {get; set;};
public Garage()
{
autobus_list = getAutobusList();
tipper_list = getTippetList();
}
}
За работу с классом Garage отвечает класс логики
public class Logic
{
public Garage garage = new Garage();
....
// Теперь сама суть вопроса
// Требуется вернуть отсортированный по стояночному месту список
// или список определенной техники в каком либо гараже
// В данный момент я делаю это такими вот методами
public List<Autobus> getListAutobusInBox(int box)
{
return garage.autobus_list.FindAll(x => x.Box == box);
}
public List<Tipper> getListTipperInBox(int box)
{
return garage.tipper_list.FindAll(x => x.Box == box);
}
public List<Autobus> SortListAutobus(List<Autobus> list)
{
list.Sort(delegate (Autobus x, Autobus y)
{
if (object.Equals(x, y)) return 0;
return x.Position.CompareTo(y.Position);
});
return list;
}
public List<Tipper> SortListTipper(List<Tipper> list)
{
list.Sort(delegate (Tipper x, Tipper y)
{
if (object.Equals(x, y))
return 0;
return x.Position.CompareTo(y.Position);
});
return list;
}
}
Вот нутром понимаю, что методы SortListAutobus и SortListTipper абсолютно идентичны на уровне базового класса BaseCar, как и методы getListTipperInBox и getListAutobusInBox. Подскажите как из свести вместе на уровне базового класса. Вполне вероятно это делается на уровне интерфейсов, но с ними я по книжке не могу никак подружиться. Если дело все же в интерфейсах можно на данном примере показать как он будет работать.
Спасибо.