C # OO Design: случай, когда нужен только ОДИН абстрактный метод - PullRequest
0 голосов
/ 23 декабря 2011

У меня есть 2 класса, которые имеют одинаковую логику / рабочий процесс, за исключением одного метода.

Итак, я создал абстрактный базовый класс, в котором отличающийся метод объявлен как абстрактный.

Ниже приведен пример кода для демонстрации моего дизайна; Кто-нибудь может предложить предложения по лучшему подходу или я иду в правильном направлении. Я не использовал интерфейс, потому что оба производных класса B и C буквально разделяют большую часть логики. Есть ли лучший способ сделать то, что я делаю ниже, с помощью внедрения зависимостей?

public abstract class A
{
    public void StageData()
    {
        // some logic
        DoSomething();
    }
    public void TransformData();
    public abstract DoSomething();
}

public class B : A
{
    public override void DoSomething()
    {
        // Do Something!
    }
}

public class C : A
{
    public override void DoSomething()
    {
        // Do Something!
    }
}

1 Ответ

3 голосов
/ 23 декабря 2011

Нет ничего плохого в том, что вы сделали. Внедрение внедрения зависимостей в этот дизайн было бы беспорядочным и излишним - вам пришлось бы передать делегат:

public class ABC
{
    public ABC(Action z)
    {
        _doSomethingAction = z;
    }

    public void DoSomething()
    {
        _doSomthingAction.Invoke();
    }


    private Action _doSomthingAction;
}

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

...