0

Я пишу тайловую карту на Unity. В процессе написания появилось предчувствие, что я делаю что-то не так. Это связано с тем, что я пишу слишком много перегрузок. Вопрос в том, как избавиться от этих перегрузок и нужно ли это делать? Или возможно проблема в другом? Помогите сделать код удобнее. Код с перегрузками:

public List<Cell> NeighbordCells(Cell cell, List<Vector3Int> neighbordCellsIndexesOffset) //Основной метод Определение соседних ячеек
{
    List<Cell> rez = new List<Cell>();
    foreach (var neighbordCellIndexOffset in neighbordCellsIndexesOffset)
    {
        var neighdordCellIndex =
            OddrCoordinatesInIndex(cell.positionInOddrCoordinates + neighbordCellIndexOffset);
        if (neighdordCellIndex != -1)
        {
            rez.Add(cells[neighdordCellIndex]);
        }
        else
        {
            rez.Add(null);
        }
    }
    return rez;
}

public List<Cell> NeighbordCells(Tile tile, List<Vector3Int> neighbordCellsIndexesOffset) //Перегрузка 1 { return NeighbordCells(tile.Cell, neighbordCellsIndexesOffset); }

public List<Cell> NeighbordCells(List<Tile> tiles, List<Vector3Int> neighbordCellsIndexesOffset) //Перегрузка 2 { var neighbordCells = new List<Cell>(); foreach (var tile in tiles) { neighbordCells.AddRange(NeighbordCells(tile, neighbordCellsIndexesOffset)); } }

public List<Cell> NeighbordCells(List<Cell> cells, List<Vector3Int> neighbordCellsIndexesOffset) //Перегрузка 3 { var neighbordCells = new List<Cell>(); foreach (var cell in cells) { neighbordCells.AddRange(NeighbordCells(cell, neighbordCellsIndexesOffset)); } }

Недавно познакомился с обобщениями (дженериками), возможно перегрузки 2 и 3 можно объединить с помощью них, но как это правильно сделать, пока не понимаю. Спасибо

insolor
  • 49,104

1 Answers1

1

Перегрузка методов это не лишнее. Лишнее это то без чего ваше приложение и его использующие могут работать не используя. Перегрузка обычно создается из потребностей и принципа SOLID конкретнее принципа О - Принцип открытости/закрытости. Поскольку вносить изменения в существующий код не рекомендуется то в следствии появляется перегрузки.

Aziz Umarov
  • 22,567
  • 2
  • 10
  • 33
  • Согласен с началом ответа, не со всем согласен с его окончанием. Особенно не согласен с этим Поскольку вносить изменения в существующий код не рекомендуется. Чуть подробнее про О здесь. – tym32167 Mar 26 '21 at 15:13
  • @tym32167 Огромное спасибо за ваш комментарий и отличный ответ про О. – Влад Рудницкий Mar 27 '21 at 19:14
  • @ВладРудницкий пожалуйста! – tym32167 Mar 27 '21 at 19:59