Здравствуйте, Neco, Вы писали:
N>- первое что бросается в глаза — очень неявный код presentation layer'а. Т.е. в нём основное, что видно — танцы вокруг исключений, а никак не собственно работа. Причём это в принципе касается не только presentation'а — вы вообще мало где пишете больше чем две строчки эфективного кода подряд. Это очень тяжело читать. На продакшн код мало похоже.
Ну а как-же? Предлагаете ваш вариант с делегатами использовать (это у вас было?)? Это слишком запутано. А если я изменю на Win или Web-приложение? Гораздо удобнее отловить мое UserFriendly Exception и вывести информацию пользователю в удобном виде.
N>- текст исключения (например "Ошибка при получении значения счетчика") вы храните в классе-пользователе. Это в принципе ставит крест на том, чтобы делать без оборачивания больше, чем одно действие. Хотелось бы в связи с этим взглянуть на код, в котором класс Counter будет использоваться хотя бы раза три (в разных местах).
Вот за это спасибо. Я уже когда спать вчера лег -- как раз об этом подумал. Правильное замечание -- у меня получилось дублирование кода.
N>- также хотелось бы посмотреть на более развитую иерархию классов — как работать в таком случае? Предположим между консолью и Counter'ом вписался некий класс, ответсвенность которого просто выдавать уникальное увеличивающееся значение. Как будет выглядеть код этих трёх классов?
Собственно в чем проблема? Можно сделать наследника Counter -- там конструктор даже без параметров есть.
N>- вы обернули все методы кроме Increment. Почему так? Смею предположить, что это из-за того, что в аннотациях у него сказано, что он может что-либо выбрасывать. А как это может жить в развивающемся коде? Ведь невозможно помнить и обновлять все места, где используется некий метод.
Помнить не возможно, есть инструменты для проведения рефакторинга. Другого способа нет -- если изменились контракты -- значит должен измениться и вызывающий код.
0K>>Весь смысл кода -- обернуть эту гармошку в одно простое исключение, ясно отражающее причину ошибки и содержащее всю необходимую информацию. N>гм. а не могли бы вы показать, где вы выполняете "оборачивание в одно просто исключение"? а то я вижу как гармошка разворачивается, а где сворачивается не могу понять.
Сворачивается в 2-х местах и получается CounterException.