Ưu tiên kết hợp (composition) hơn kế thừa trong C#
Trong bài học này, bạn sẽ xây dựng một đơn hàng từ các đối tượng nhỏ phối hợp với nhau thay vì dùng kế thừa.
Giới thiệu
Kết hợp (composition) là cách xây dựng đối tượng bằng cách ghép các đối tượng nhỏ hơn lại với nhau, mỗi đối tượng đảm nhận một việc rõ ràng. So với kế thừa, cách làm này giúp các class gọn gàng, dễ thay đổi và tránh được những cây kế thừa phức tạp, cứng nhắc.
Đơn hàng Order chứa một danh sách các dòng hàng LineItem thay vì kế thừa từ chúng. Thuộc tính Total giao việc tính toán cho từng dòng hàng bằng Items.Sum(item => item.Price). Mỗi đối tượng chỉ chịu một trách nhiệm, nên tổng tiền của sách và bút là 35.
Ví dụ C# chạy được
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