Схема строителя по сравнению с структурой в качестве параметра

StackOverflow https://stackoverflow.com/questions/19845100

Вопрос

Если у класса есть слишком много параметров в конструкторе, мы можем использовать либо структуру, либо шаблон строителя.

Как лучше? Есть ли хорошая практика?

Это было полезно?

Решение

Используйте класс со структурой, которая отвечает вашей потребности. Мартин Фаулер имеет одну аналогичную технику под названием DataTransferObject (DTO), в котором вы передаете объектную модель вместо получения данных, используя несколько вызовов (предполагаемые вызовы базы данных), снижая стоимость.

Преимущество по сравнению с шаблоном строителя:

  1. Структура класса не имеет дополнительной логики, означает, что ее легче считать (меньше логики)
  2. Не создавайте Конструктор делает реальные работы Запах кода, снова облегчает чтение кода
  3. Операция дешевая, поскольку вы просто передаете ссылки и не создаете совершенно новый объект. Особенно, когда структура данных большая.

Недостаток: объект находится в изменчивом состоянии.

Другие советы

Это будет зависеть от того, какими были параметры, и их отношение друг к другу и сколько требуется по сравнению с необязательным.

Если несколько параметров связаны, обычно лучше создать отдельный класс (или структуру) для хранения этих параметров.

Например, вместо

TransferMoney(long srcAccountNumber, int srcAmount, Currency srcCurrency, long destAccountNumber)

Мы видим, что SRC Ammount и SRCCurrance связаны, и мы можем создать новый класс для обработки денег различных сумм (и, возможно, добавить методы для преобразования в другие валюты и т. Д.) И уменьшить количество параметров:

TransferMoney(long srcAccountNumber, Money amount, long destAccountNumber)

Этот вопрос является языковым агностиком, но если у вас был язык, который не поддерживает значения по умолчанию (например, Java), вам может потребоваться несколько перегруженных методов с различным числом и типами параметров, чтобы соответствовать всем возможным комбинациям. Если есть много комбинаций, то строитель - более чистый путь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top