using System; using System.Collections.Generic; using System.Linq; using BoundaryLab.Domain; using BoundaryLab.Application; namespace BoundaryLab.Infrastructure; public sealed class LegacyPricer { public int Compute(int quantity) => checked(quantity * 2); } public sealed class LegacyCostAdapter(LegacyPricer legacy) : ICost { public int Quote(int units) { if (!UnitRule.Valid(units)) throw new ArgumentOutOfRangeException(nameof(units)); return legacy.Compute(units); } } public sealed class CountingCost(ICost inner) : ICost { public int Calls { get; private set; } public int Quote(int units) { int result = inner.Quote(units); Calls++; return result; } }