Не задача организации предоставлять отформатированные данные для отображения: оставьте форматирование для кода, который фактически выполняет отображение.Более того, это не ваша работа программиста класса сущностей: 1) предвидеть каждую будущую потребность в отформатированном значении и 2) постоянно обновлять класс сущности для предоставления новых отформатированных значений, которые вы не делали't (нет, не мог ) предвидеть.
Поэтому просто метод getAmount
возвращает необработанные необработанные данные:
public class Entity {
private BigDecimal amount;
public BigDecimal getAmount(){
return amount;
}
//...
}
и исключает getAmountFormatted
из сущности.Если вы хотите отобразить сумму, отформатированную с точностью до двух знаков после запятой, просто получите необработанную сумму с помощью getAmount()
и отформатируйте ее прямо на месте:
Entity e = ...;
DecimalFormat df = new DecimalFormat(".##");
System.out.println("The amount is " + df.format(e.getAmount());
Вот небольшая история, которая иллюстрирует, почему я думаю, что этопуть ...
Предположим, что в вашей сущности есть секунда сумма, otherAmount
, которая была включена в момент создания сущности, потому что кто-то думал, что может будет необходимо в будущем.И предположим, что из-за того, что в то время поле не планировалось использовать, вы не удосужились создать метод getOtherAmountFormatted()
для предоставления версии otherAmount
в двух десятичном формате.
Теперь наступает будущее.Поле otherAmount
теперь используется, и вам нужно начать отображать его с двумя десятичными знаками вместе с оригинальным amount
.Вы знаете, что вам нужно будет добавить строку
System.out.println("The other amount is " + ...
в код, который отображает суммы.Вопрос только в том, как вы закончите эту линию.Вы добавляете в свой класс сущностей метод getOtherAmountFormatted()
и затем пишете:
System.out.println("The other amount is " + e.getOtherAmountFormatted()); // NO!!
Или вы вообще не касаетесь класса сущностей и просто пишете:
System.out.println("The other amount is " + df.format(e.getOtherAmount()); // Yes!!
Сущность не является классом, которому в конечном итоге требуется отформатированная версия otherAmount
, поэтому ее не нужно менять, чтобы приспособиться к совсем другому фрагменту кода, который сейчас нуженотформатированная версия otherAmount
.Особенно, когда этот другой бит кода может просто получить неформатированное количество, которое немодифицированный объект может уже предоставить, а затем выполнить необходимое форматирование для себя.
Следующий сценарий: в будущем, появилось еще одно требование для печати этих полей суммы, но теперь с тремя десятичными знаками.Собираетесь ли вы добавить еще больше методов в класс сущностей, чтобы обеспечить трехзначные версии сумм (в дополнение к тем, которые уже предоставляют двухзначные версии)?Или вы вообще не будете касаться класса сущностей и просто напишите, в тот момент, когда вам понадобятся эти три десятичные отформатированные значения:
DecimalFormat df3 = new DecimalFormat(".###");
// ...
System.out.println("The amount in 3 decimals is " + df3.format(e.getAmount());
System.out.println("The other amount in 3 decimals is " + df3.format(e.getOtherAmount());