Код IT
← Каталог

Паттерны проектирования — Кейс 3. Интеграция с устаревшей бухгалтерской системой

Фрагмент из «Паттерны проектирования»: Кейс 3. Интеграция с устаревшей бухгалтерской системой.

csharp projectencyclopedia7-06-proektirovanie-i-arhitektura-115 embed URL статья в энциклопедии
C# main.cs
// Целевой интерфейс
public interface ITaxCalculator { decimal Calculate(Order order); }

// Адаптер для legacy
public class LegacyTaxAdapter : ITaxCalculator
{
    private readonly AccountingSystem _legacy;
    public decimal Calculate(Order order) {
        var xml = XmlSerializer.Serialize(order);
        var result = _legacy.CalcTax_V1(xml);
        return XmlSerializer.Deserialize<decimal>(result);
    }
}

// Адаптер для REST (будущее)
public class RestTaxAdapter : ITaxCalculator { ... }

// Фабрика
public class TaxCalculatorFactory
{
    public ITaxCalculator Create(string provider) => 
        provider switch {
            "legacy" => new LegacyTaxAdapter(),
            "rest" => new RestTaxAdapter(),
            _ => throw new ArgumentException()
        };
}
// Целевой интерфейс
public interface ITaxCalculator { decimal Calculate(Order order); }

// Адаптер для legacy
public class LegacyTaxAdapter : ITaxCalculator
{
    private readonly AccountingSystem _legacy;
    public decimal Calculate(Order order) {
        var xml = XmlSerializer.Serialize(order);
        var result = _legacy.CalcTax_V1(xml);
        return XmlSerializer.Deserialize<decimal>(result);
    }
}

// Адаптер для REST (будущее)
public class RestTaxAdapter : ITaxCalculator { ... }

// Фабрика
public class TaxCalculatorFactory
{
    public ITaxCalculator Create(string provider) => 
        provider switch {
            "legacy" => new LegacyTaxAdapter(),
            "rest" => new RestTaxAdapter(),
            _ => throw new ArgumentException()
        };
}