C#で継承より合成(composition)を優先する
このレッスンでは、継承を使う代わりに、小さなオブジェクトを組み合わせて注文を作ります。
はじめに
合成(composition)は、それぞれがはっきりした役割を持つ小さなオブジェクトを組み合わせて、オブジェクトを作る方法です。継承と比べると、クラスがすっきりして変更しやすくなり、複雑で融通のきかない継承の階層を避けられます。
注文Orderは、明細LineItemを継承するのではなく、明細のリストを持っています。プロパティTotalはItems.Sum(item => item.Price)で計算を各明細に任せます。各オブジェクトは1つの責任だけを持ち、本とペンの合計金額は35になります。
実行できる C# の例
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 を押し、次の行に進む前にローカル変数の値を確かめましょう。