Установка значений объекта - PullRequest
2 голосов
/ 30 сентября 2010

Допустим, у меня есть класс с именем House с двумя полями

name
address

Каждое из этих полей имеет геттер и сеттер.

Теперь я хочу другойметод в классе House с именем setValues.Этот метод должен устанавливать поля со свойствами из переданного объекта другого типа.

Существует два способа создания этого метода.Первый способ:

private void setHouse(HouseTransfer transer){
   name = transfer.getName();
   address = transfer.getAddress();
}

Или второй вариант:

private void setHouse(HouseTransfer transer){
   setName(transfer.getName());
   setAddress(transfer.getAddress());
}

Какой из них является более "наилучшей практикой"?

Ответы [ 4 ]

3 голосов
/ 30 сентября 2010

На определенном уровне детализации разработка программного обеспечения является более субъективным вопросом, чем один из черно-белых абсолютов. Я не верю, что здесь есть абсолютная"лучшая практика".

При этом я лично использовал бы вторую форму. Основная идея наличия метода установки заключается в том, что в какой-то момент вам может понадобиться некоторая специальная логика для установки этого значения (например, форматирование ввода, очистка, проверка и т. Д.). Поэтому имеет смысл всегда полагаться на любую такую ​​логику, находящуюся в одном центральном месте, а не разбросанную по всему коду, где бы эта переменная не была установлена.

Если у вас есть по-настоящему тривиальный пример, где установщик просто устанавливает значение и абсолютно точно знает, что никакая другая логика никогда не будет добавлена, то для простоты вы наверняка можете использовать первую форму. Помните, что во второй форме нет реального снижения производительности, так что я бы просто использовал это.

2 голосов
/ 30 сентября 2010

Я бы использовал отдельные методы получения / установки внутри метода setHouse (который является вашим вторым вариантом).

Тот факт, что у вас есть сеттеры, указывает на то, что вокруг этой операции присутствует некая инкапсуляция. Вместо того, чтобы переписывать код для обеспечения инкапсуляции, используйте то, что у вас уже есть.

1 голос
/ 30 сентября 2010

ответ Джона на этот вопрос (взятый из другого вопроса об использовании геттеров / сеттеров, который не является дубликатом этого вопроса)

Вам не всегда нужны геттеры / сеттеры, ноесли у вас есть, обычно есть веская причина, почему вы их реализовали, и в этом случае: используйте их.

0 голосов
/ 30 сентября 2010

Возможно, если вы получаете и устанавливаете в двух разных местах, вы можете рассмотреть возможность разделения вашего геттера и сеттера на общий интерфейс.Это может упростить последующие настройки, верно?

...