Java и инкапсуляция без магии
Публичные поля выглядят удобно ровно до первого бага.
account.balance = new BigDecimal("-100");
Код скомпилировался, объект изменился, бизнес-правило сломалось.
Никакой проверки, никакого контроля, никакой гарантии, что BankAccount остаётся в корректном состоянии.
Поэтому поле баланса не должно быть частью публичного API. Наружу можно отдать чтение, а изменение проводить через методы, где явно описаны правила:
private BigDecimal balance = BigDecimal.ZERO;
public BigDecimal getBalance() {
return balance;
}
public void withdraw(BigDecimal amount) {
if (amount.signum()
Публичные поля выглядят удобно ровно до первого бага.
account.balance = new BigDecimal("-100");
Код скомпилировался, объект изменился, бизнес-правило сломалось.
Никакой проверки, никакого контроля, никакой гарантии, что BankAccount остаётся в корректном состоянии.
Поэтому поле баланса не должно быть частью публичного API. Наружу можно отдать чтение, а изменение проводить через методы, где явно описаны правила:
private BigDecimal balance = BigDecimal.ZERO;
public BigDecimal getBalance() {
return balance;
}
public void withdraw(BigDecimal amount) {
if (amount.signum()