Preferire la composizione (composition) all'ereditarietà in C#
In questa lezione costruirai un ordine a partire da oggetti più piccoli che collaborano, invece di usare l'ereditarietà.
Introduzione
La composizione (composition) consiste nel costruire un oggetto mettendo insieme oggetti più piccoli, ognuno con un compito chiaro. Rispetto all'ereditarietà, questo approccio rende le classi più snelle e facili da modificare ed evita gerarchie di ereditarietà complesse e rigide.
L'ordine Order contiene una lista di righe LineItem invece di ereditare da esse. La proprietà Total affida il calcolo a ogni riga con Items.Sum(item => item.Price). Ogni oggetto ha una sola responsabilità, e il totale del libro e della penna è 35.
Esempio C# eseguibile
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