Я разрабатываю приложение, которое будет использоваться для открытия и закрытия клапанов в промышленной среде, и подумывал о чем-то простом, как это:
public static void ValveController
{
public static void OpenValve(string valveName)
{
// Implementation to open the valve
}
public static void CloseValve(string valveName)
{
// Implementation to close the valve
}
}
(Реализация будет записывать несколько байтов данных в последовательный порт для управления клапаном - «адрес», полученный из имени клапана, и либо «1», либо «0», чтобы открыть или закрыть клапан).
Другой разработчик спросил, нужно ли нам вместо этого создавать отдельный класс для каждого физического клапана, которых насчитывается десятки. Я согласен, что было бы лучше писать код, PlasmaValve.Open()
а не ValveController.OpenValve("plasma")
, но это перебор?
Кроме того, мне было интересно, как лучше решить проект с учетом нескольких гипотетических будущих требований:
- Нас просят поддержать клапан нового типа, для открытия и закрытия которого требуются разные значения (не 0 и 1).
- Нас просят поддержать клапан, который можно установить в любое положение от 0 до 100, а не просто «открыть» или «закрыть».
Обычно я бы использовал наследование для такого рода вещей, но недавно я начал думать о «композиции поверх наследования» и задавался вопросом, есть ли более подходящее решение для использования композиции?