Однажды я задал вопрос о переполнении стека о наследовании.
Я сказал, что проектирую шахматный движок в ООП-моде. Таким образом, я наследую все свои части от абстрактного класса Piece, но наследование все еще продолжается. Позвольте мне показать по коду
public abstract class Piece
{
public void MakeMove();
public void TakeBackMove();
}
public abstract class Pawn: Piece {}
public class WhitePawn :Pawn {}
public class BlackPawn:Pawn {}
Программисты посчитали мой дизайн немного более инженерным и предложили убрать цветные классы элементов и сохранить их в качестве элемента свойства, как показано ниже.
public abstract class Piece
{
public Color Color { get; set; }
public abstract void MakeMove();
public abstract void TakeBackMove();
}
Таким образом, Пьеса может знать его цвет. После реализации я увидел, что моя реализация идет так, как показано ниже.
public abstract class Pawn: Piece
{
public override void MakeMove()
{
if (this.Color == Color.White)
{
}
else
{
}
}
public override void TakeBackMove()
{
if (this.Color == Color.White)
{
}
else
{
}
}
}
Теперь я вижу, что свойство color вызывает операторы if в реализациях. Это заставляет меня чувствовать, что нам нужны определенные кусочки цвета в иерархии наследования.
В таком случае у вас будут классы, такие как WhitePawn, BlackPawn, или вы будете заниматься дизайном, сохраняя свойство Color?
Не видя такой проблемы, как бы вы хотели начать дизайн? Сохранять свойство Color или иметь наследственное решение?
Изменить: я хочу указать, что мой пример может не полностью соответствовать примеру реальной жизни. Поэтому, прежде чем пытаться угадать детали реализации, просто сконцентрируйте вопрос.
Я на самом деле просто спрашиваю, приведет ли использование свойства Color, если заявления лучше использовать наследование?