Я розробляю додаток, який буде використовуватися для відкривання та закриття клапанів у промислових умовах, і думав про щось таке, як це: -
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, а не просто «відкрити» або «закрити».
Як правило, я б використовував спадщину для подібних речей, але останнім часом я почав обертатися "складом над спадщиною" і цікавлюсь, чи існує розсуд, який має використовувати композиція?