Preferir la composición (composition) a la herencia en C#
En esta lección vas a construir un pedido a partir de objetos pequeños que colaboran, en lugar de usar la herencia.
Introducción
La composición (composition) consiste en construir un objeto juntando objetos más pequeños, cada uno con una tarea clara. Comparado con la herencia, este enfoque mantiene las clases ligeras y fáciles de cambiar, y evita jerarquías de herencia complejas y rígidas.
El pedido Order contiene una lista de líneas LineItem en lugar de heredar de ellas. La propiedad Total delega el cálculo en cada línea con Items.Sum(item => item.Price). Cada objeto tiene una sola responsabilidad, y el total del libro y el bolígrafo es 35.
Ejemplo de C# ejecutable
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