|
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 116
|
|||||||||||||||||||||||||||||||
Рефакторинг кода24.02.2018, 20:18. Показов 2202. Ответов 14
Метки нет (Все метки)
Привет, помогите улучшить код?
Задача - с помощью сервиса randomuser.me получить список более 100 пользователей и показать данные о них. Пока это консольное приложение. Класс User
Класс Logger - инкапсулирует сообщения об ошибках
Класс HTTPWorker - занимается получением ответа по HTTP запросу
- его название - возможно он слишком короткий и метод getResponseByRequest надо включить в другой класс. Хотя согласно одному из принципов SOLID - всё правильно Класс Parser - разбирает HTTP ответ
- его название. Возможно назвать более конкретно. Например, RandomUserParser - return null; - хорошо ли так - IDEA предложила. Если нет - как избавится - присутствует явные объект new Logger() - вводится зависимость. Как её избежать? Класс Users - создаёт и отдаёт коллекцию пользователей
- нужен ли он вообще. Users перекликается с существующим User - не очень хорошо. Если не нужен, куда поместить его бизнес логику? В main? Но тогда загромоздится main. Класс Main
- наличие for. Но вроде как никуда от него не деться. Main - это класс-потребитель или клиент. Он должен вызывать только методы get других классов (как я думаю) Просьба помочь улучшить архитектуру, стиль и вообще дать любые замечания по рефакторингу. Если мои рассуждения некорректны - поправьте
0
|
|||||||||||||||||||||||||||||||
| 24.02.2018, 20:18 | |
|
Ответы с готовыми решениями:
14
Рефакторинг кода для генерации, валидации и записи в файл номеров платежных карт Рефакторинг while в отдельный класс |
|
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,764
|
|||||||||||||||||||||||||||||||
| 25.02.2018, 00:44 | |||||||||||||||||||||||||||||||
|
Кликните здесь для просмотра всего текста
Что точно надо сделать, так это 1) сменить StringBuffer на StringBuilder, 2) Возвращать не StringBuffer/StringBuilder, а String. А как по мне, так лучше возвращать byte[], или, в идеале, принимать Consumer<InputStream>, пусть он разбирается с потоком.
0
|
|||||||||||||||||||||||||||||||
|
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 116
|
|
| 25.02.2018, 01:15 [ТС] | |
|
1. Идея своего логгера в том, что он должен содержать сообщения о разных ошибках. Если одну ошибку залогировать в разные места, получится дублированный код, используя готовый Logger.
Готовый логгер: Т.е. в одном месте (упростил формальный класс) new Logger().log("Ошибка 1"); в другом месте (или классе) new Logger().log("Ошибка 1"); - дублирование текста ошибки Если свой логгер в одном месте new Logger().logMistake1(); в другом месте new Logger().logMistake1(); logMistake1() инкапсулирует текст ошибки - нет дублирования кода Или я что-то не понимаю 2. User и Users - почти такое название, можно подумать, что функционал их схож. Или всё ок? 3. Можно ещё пояснить какие паттерны тут лягут? Например синглтон как мне кажется 4. Так и не получил ответы про слабую связность слоёв Например public class Parser { private Logger logger = new Logger(); ---- жёсткое связывание private Logger logger ---------------------- слабое связывание ......... ......... ......... ......... }
0
|
|
|
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
|
|
| 25.02.2018, 01:39 | |
|
Какие паттерны какая связанность. Делаешь запрос Apache http components, отдаешь джэксону, получаешь результат, все
0
|
|
|
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
|
|||||||||||||||||
| 25.02.2018, 09:15 | |||||||||||||||||
Сообщение было отмечено HighPredator как решение
Решение
olegall, как то вы все усложняете )
Идем по адресу https://randomuser.me/api - и копируем полученый json Шаг 2. Идем на какой нибудь онлайн конвертер json и генерируем pojo классы для этого jsona. Я воспользовался http://www.jsonschema2pojo.org/ Шаг 3. Подключаем retrofit
0
|
|||||||||||||||||
|
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 116
|
|||||||||||||||||||||
| 25.02.2018, 13:29 [ТС] | |||||||||||||||||||||
|
К сожалению уже не успеваю всё глобально переделать
Мои улучшения: Улучшил HttpClient - избавил его от зависимости - урла, теперь я его в конструктор перадаю
применил ко всем классам модификатор final - предполагаю, что от них нельзя наследоваться. Правильно?
0
|
|||||||||||||||||||||
|
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
|
|
| 25.02.2018, 14:00 | |
|
olegall, ваш проект сейчас выглядит, примерно так (без обид):
И ваши попытки рефакторить имена классов, делать что то финальным... выглядят как "- интересно, а если я стеночку в зеленый покрашу.. лучше выглядеть будет?"
1
|
|
|
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 116
|
||||||
| 25.02.2018, 14:16 [ТС] | ||||||
|
Текущий вариант:
Что сейчас плохо кроме классов HttpClient и Parser? Есть идея избавиться от Parser и перенести метод getUserFromJSON в User, переименовав его в get, т.к. он не универсальный и заточен под User. Правильно?
0
|
||||||
|
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
|
|
| 25.02.2018, 14:26 | |
|
olegall, вы для начала расскажите, для чего вы это делаете? Если это тестовое задание для устройства на работу - то все плохо. Если это задание для себя что бы разобраться и понять как это все работает, то тут уже можно что то обсуждать.
0
|
|
|
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 116
|
|
| 25.02.2018, 14:28 [ТС] | |
|
Тестовое задание. Но и для себя тоже тренировка. Я исправил, что мог, что-то не успею. Всё ещё ВСЁ плохо?
0
|
|
|
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
|
||
| 25.02.2018, 14:38 | ||
|
Добавлено через 44 секунды а так да, вопросов довольно много возникает
0
|
||
|
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
|
|
| 25.02.2018, 14:41 | |
|
olegall, в задании оговорено что фрейморками нельзя пользоваться? Графический интерфейс к этому безобразию нужен?
0
|
|
|
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 116
|
|
| 25.02.2018, 14:49 [ТС] | |
|
Там ничего не оговорено. Это должно быть мобильное приложение в итоге
0
|
|
|
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
|
||
| 25.02.2018, 14:59 | ||
|
Работодатель скорее всего ожидает увидеть что вы умеете использовать:
1. Системы сборки (maven, gradle и тд) 2. Git 3. Конфигуровать и использовать один из существующих логгеров (а не изобретенный свой) 4. Сможете подключить и воспользоваться существующей библиотекой для парсинга json 5. Продемонстрируете умение работать с асинхронными обращения к рест сервисам. 6. Использовать dependency injection. 7. Имеете хорошие навыки в ООП. Добавлено через 1 минуту Добавлено через 5 минут вам скорее всего что то типа этого нужно почитать https://habrahabr.ru/company/r... og/275943/
0
|
||
|
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
|
|
| 03.03.2018, 16:59 | |
|
olegall, если все еще актуально наткнулся на статейку https://habrahabr.ru/post/345372/ помоему это именно то что вам нужно было
0
|
|
| 03.03.2018, 16:59 | |
|
Помогаю со студенческими работами здесь
15
Конвертер валют, рефакторинг Рефакторинг - Наследование и перегрузка Сделать рефакторинг для программы Как правильно сделать рефакторинг Exceptions Рефакторинг кода(упрощение для понимания) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|