У меня есть 2 класса, которые имеют тот же логический/рабочий процесс, за исключением одного метода.C# OO Design: case, когда нужен только ОДИН абстрактный метод
Итак, я создал абстрактный базовый класс, где метод, который отличается, объявлен как абстрактный.
Ниже приведен пример кода для демонстрации моего дизайна; кто может предложить предложения по лучшему подходу или я направляюсь в правильном направлении. Я не использовал интерфейс, потому что оба производных класса 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!
}
}
Несомненно, это один из способов реализации совместного использования C#/Java (другой - состав/прокси). Однако только потому, что оба класса имеют общий предок, это не означает, что интерфейсы не являются полезными - они значительно облегчают заглушку и/или используют DI и/или полностью заменяют и т. Д. –
(Я полюбил интерфейсы, потому что они разрешить такое разделение класса/реализации: если бы я создавал новый язык, я бы, скорее всего, * только * разрешал типы, задаваемые «интерфейсом», и поощрял специализацию интерфейса.) –
Да, я предпочитаю использовать интерфейсы также для большую часть, но как вы справляетесь или уменьшаете дублируемую логику кода? – Abe