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

Рекомендации по разработке на C# — Избегание двунаправленной зависимости

Фрагмент из «Рекомендации по разработке на C#»: Избегание двунаправленной зависимости.

C# main.cs
// Плохо: двунаправленная зависимость
public class Order
{
    public Customer Customer { get; set; }
}

public class Customer
{
    public List<Order> Orders { get; set; }
}

// Хорошо: зависимость через интерфейс
public interface IOrderRepository
{
    IEnumerable<Order> GetOrdersForCustomer(Customer customer);
}

public class CustomerService
{
    private readonly IOrderRepository _orderRepository;
    
    public CustomerService(IOrderRepository orderRepository)
    {
        _orderRepository = orderRepository;
    }
    
    public IEnumerable<Order> GetCustomerOrders(Customer customer)
    {
        return _orderRepository.GetOrdersForCustomer(customer);
    }
}
// Плохо: двунаправленная зависимость
public class Order
{
    public Customer Customer { get; set; }
}

public class Customer
{
    public List<Order> Orders { get; set; }
}

// Хорошо: зависимость через интерфейс
public interface IOrderRepository
{
    IEnumerable<Order> GetOrdersForCustomer(Customer customer);
}

public class CustomerService
{
    private readonly IOrderRepository _orderRepository;
    
    public CustomerService(IOrderRepository orderRepository)
    {
        _orderRepository = orderRepository;
    }
    
    public IEnumerable<Order> GetCustomerOrders(Customer customer)
    {
        return _orderRepository.GetOrdersForCustomer(customer);
    }
}