דָּוִדdavidov777 (daviddavidov777) wrote,
דָּוִדdavidov777
daviddavidov777

горящие туры красноярск

Это что ещё такое?
Получается, что «amount» — это суммарная задолженность данного клиента, а если клиент внёс предоплату, то эта «задолженность» со знаком минус. Ну вот, это уже какое-то знание о коде. Попробуем-ка превратить этот комментарий в юнит-тест:

public class AccountTest
{
@Test
public void negativeAmountMeansThatAccountIsPrepaid() {
Account prepaidAccount = new Account(-123);
assertTrue(prepaidAccount.isPrepaid());
}
}


Раз мы проверяем случай негативного «amount», хорошо бы проверить и случай позитивного:
@Test
public void positiveAmountMeansThatAccountIsInDebt() {
Account indebtAccount = new Account(456);
assertFalse(indebtAccount.isPrepaid());
assertTrue(indebtAccount.isInDebt());
}


Вот так ненароком у нас возникло два новых метода isPrepaid и isInDebt, реализация которых, конечно, очевидна:
public class Account
{
private BigDecimal amount;
public boolean isInDebt() {
return amount > 0;
}
public boolean isPrepaid() {
return amount < 0;
}
}


Вот видите, уже и IF'ы появились в коде!
Следующая мысль, которая должна при этом прийти в голову: наверное, эти IF'ы уже были где-то раньше?

Пришлось немножко поискать, но это того стоило. Оказалось, что эти IF'ы действительно были в коде, причём не где-нибудь, а в JSP-файле, то есть в слое «view», в котором по определению никакой логики быть не должно:

<%-- Positive amount means that account is in debt %-->

Оплатите задолженность!


Предоплата



Опаньки, как интересно! Вот и мой второй тест-кейс всплыл. Как замечательно. Теперь, поскольку у нас есть методы isInDebt и isPrepaid, мы можем убрать логику из JSP:


Оплатите задолженность!


Предоплата



Стало лучше? Я думаю, что стало. Это уже чуть больше похоже на инкапсуляцию — скрытие реализации от посторонних глаз. Только класс Amount знает, в каком случае клиент должен или не должен денег. Никто больше в целом мире не знает, как это происходит — клиент получает уже готовое решение с помощью методов isInDebt и isPrepaid. Теоретически значения «долг» и «предоплата» вообще могут храниться в разных колонках базы данных, или даже вообще в разных таблицах и вообще в разных базах. Теперь благодаря наличию двух методов эта логика спрятана (инкапсулирована) в классе Account.


Для вас у меня есть Горящие туры из Красноярска по низким ценам.Обращайтесь буду рад помочь!
Tags: горящие туры
Subscribe

  • мультиварка panasonic

    мультиварка panasonic сайт здорового питания, приготовления вкусной и полезной пищи на самых лучших надёжных недорогих бытовых приборах 21-го века -…

  • New age.................

    Заниматься еще больше торговлей!Понять куда пойдет тренд. Учиться , как можно больше задавать как можно больше вопросов.не терять время на всякую…

  • music

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments