Композиция (composition) вместо наследования в C#
В этом уроке вы соберёте заказ из небольших взаимодействующих объектов вместо наследования.
Введение
Композиция (composition) - это сборка объекта из более мелких объектов, у каждого из которых понятная задача. По сравнению с наследованием такой подход сохраняет классы лёгкими и простыми для изменения и избавляет от сложных и жёстких иерархий наследования.
Заказ Order содержит список строк LineItem, а не наследует от них. Свойство Total поручает расчёт каждой строке через Items.Sum(item => item.Price). У каждого объекта одна обязанность, а итог за книгу и ручку 35.
Пример на C#, который можно запустить
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
record LineItem(string Name, decimal Price);
class Order
{
public List<LineItem> Items { get; } = new();
public decimal Total => Items.Sum(item => item.Price);
}
class Program
{
static void Main()
{
var order = new Order();
order.Items.Add(new("Book", 30m));
order.Items.Add(new("Pen", 5m));
Console.WriteLine(order.Total);
}
}
35Практика с отладчиком
Поставьте точку останова на важное присваивание или условие, нажмите Debug и посмотрите локальные значения, прежде чем перейти к следующей строке.