Один класс, который существует только для инициализации экземпляров другого класса [closed]

Если у вас есть это наследство:

public class A
{
    private readonly object _someParameter;
    private readonly object _anotherParameter;

    public A(object someParameter, object anotherParameter)
    {
        _someParameter = someParameter;
        _anotherParameter = anotherParameter;
    }
}

public class B : A
{
    public B(object someParameter, object anotherParameter) : base(someParameter, anotherParameter)
    {
    }
}

public class C : A
{
    public C(object someParameter, object anotherParameter) : base(someParameter, anotherParameter)
    {
    }
}

и вы хотите добавить еще один параметр в конструктор A. Тогда вам придется пройти через это B а также C также.

Чтобы избежать значительных изменений, я часто использую другой подход, в котором вы создаете другой класс, содержащий все параметры для A как свойства:

public class PropertiesOfA
{
    public object SomeParameter { get; }
    public object AnotherParameter { get; }

    public PropertiesOfA(object someParameter, object anotherParameter)
    {
        SomeParameter = someParameter;
        AnotherParameter = anotherParameter;
    }
}

public class A
{
    private readonly object _someParameter;
    private readonly object _anotherParameter;

    public A(PropertiesOfA propertiesOfA)
    {
        _someParameter = propertiesOfA.SomeParameter;
        _anotherParameter = propertiesOfA.AnotherParameter;
    }
}

public class B : A
{
    public B(PropertiesOfA propertiesOfA) : base(propertiesOfA)
    {
    }
}

public class C : A
{
    public C(PropertiesOfA propertiesOfA) : base(propertiesOfA)
    {
    }
}

Этот подход имеет то преимущество, что все производные классы не нужно обновлять, чтобы добавить еще один параметр для A. Это позволяет избежать большого количества изменений кода, особенно при использовании контейнеров IoC.

Как называется этот подход и что это за класс PropertiesOfA называется?

На самом деле это не Фабрика и не Фасад.

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *