Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> качество кода 
:(
    Опции темы
blackbanny
Дата 18.4.2013, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 18.11.2009

Репутация: нет
Всего: нет



Доброго времени суток!
Учу Java совсем недавно, в коммерческой разработке не участвовал. Хотелось бы, чтобы вы посмотрели качество кода, понятность и т.п. Стоило ли в пакете ru.regexinfo.domeninformation создавать интерфейс, базовый класс и производный? Корректен ли интерфейс классов? Верно ли работаю с исключениями?
Приложение совсем небольшое, просто хочется выслушать замечания, чтобы не допускать ошибок на более серьезных проектах 
Приложение предоставляет информацию о домене.
ссылка на GitHub
PM MAIL   Вверх
LSD
Дата 18.4.2013, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Не надо коммиты нумеровать. first commit second commit это не комментарий, с таким же успехом можно оставить сообщение пустым. В сообщении должно содержаться краткое описание того, что было сделано:
- create empty project
- create main interface 
Комитить в репозиторий скомпилированне классы не надо.

Добавлено через 39 секунд
Тесты должны лежать отдельно от основного кода.

Добавлено через 1 минуту и 42 секунды
Комментарии на языке отличном от английского - зло.

Добавлено через 5 минут
В JavaDoc так же надо описывать поведение в "исключительных" ситуациях. Например void setUrl(String url); что будет в случае неправильного URL? А в случае null?

Добавлено через 6 минут и 27 секунд
Зачем создан DomenInformationBase, планируются альтернативные реализации?

Добавлено через 7 минут и 52 секунды
Выделять исключения в отдельный пакадж не стоит, пусть лежат в том же в котором используются.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
blackbanny
Дата 18.4.2013, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 18.11.2009

Репутация: нет
Всего: нет



спасибо за замечания! smile
Цитата(LSD @  18.4.2013,  10:59 Найти цитируемый пост)
Зачем создан DomenInformationBase, планируются альтернативные реализации?

да, планируется написать класс для парсинга информации о домене с другого сайта...

а то, что в интерфейсе у меня только методы Get/Set это нормально? Может стоит класс DomenInformationFromCyPr разбить на несколько классов, т.е. чтобы не один класс предоставлял всю информацию по домену, а отдельные классы - класс для получения имени владельца домена, класс для получения даты регистрации домена и т.д.?
Корректно ли логирование и обработка исключений?
PM MAIL   Вверх
LSD
Дата 18.4.2013, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(blackbanny @  18.4.2013,  12:29 Найти цитируемый пост)
а то, что в интерфейсе у меня только методы Get/Set это нормально? Может стоит класс DomenInformationFromCyPr разбить на несколько классов, т.е. чтобы не один класс предоставлял всю информацию по домену, а отдельные классы - класс для получения имени владельца домена, класс для получения даты регистрации домена и т.д.?

Я бы сделал класс, DomainInfo который содержит в себе всю информацию о домене (включая ошибки парсинга, если возможна ситуация что информацию удалось получить лишь частично). И интерфейс DomainInfoResolver который будет на вход получать информацию о домене и возвращать DomainInfo.


Цитата(blackbanny @  18.4.2013,  12:29 Найти цитируемый пост)
Корректно ли логирование и обработка исключений?

Логгирования честно говоря вообще не заметил.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
blackbanny
Дата 18.4.2013, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 18.11.2009

Репутация: нет
Всего: нет



Цитата(LSD @  18.4.2013,  12:04 Найти цитируемый пост)
включая ошибки парсинга, если возможна ситуация что информацию удалось получить лишь частично

а где и в каком виде ошибки бы хранили?

Цитата(LSD @  18.4.2013,  12:04 Найти цитируемый пост)
интерфейс DomainInfoResolver который будет на вход получать информацию о домене и возвращать DomainInfo

наверное не информацию о домене, а сам домен? интерфейс или класс, не совсем понял про DomainInfoResolver?

Цитата(LSD @  18.4.2013,  12:04 Найти цитируемый пост)
Логгирования честно говоря вообще не заметил. 

логирование в главном классе проекта - DomenInformation
PM MAIL   Вверх
Samotnik
Дата 18.4.2013, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



1. DomenInformationConstants будет содержать только константы? Значит лучше сделать интерфейсом и убрать public static final 
2. Названия пакетов нужно продумать лучше, не желательно делать два одинаковых названия domeninformation 
   2.1 Наименования пакетов желательно в одном стиле. У тебя везде в ед-ом числе, а exceptions почему-то во множественном. 
   2.2 Если есть Main класс, я бы пакет так и назвал
3. Не используйте System.out.println, логирование ведь подключено. К тому же в одном месте применять и то и то нет смысла.:
Код

catch (GetSiteInfoCheckUrlException  e) {
            System.out.println("Неверный адрес сайта: " + url);  //это убрать
            log.log(Level.WARNING, "Exception: ", e);                    //Вместо "Exception:" нужно писать более информативно
        } catch (GetSiteInfoDomenInformationException e) {
            log.log(Level.WARNING, "Exception: ", e);
            System.out.println("Не удалось получить информацию о домене!");
        }


По коду:
1. Есть стандартные ворнинги, которые IDE подсвечивает, желательно их убрать. 
2. с названиями беда: пакет checkurl класс CheckUrl  метод checkingUrl.  smile Я бы назвал пакет util, класс UrlResolver или UrlUtil (более общее, смотря что в классе будет).
3. Вот так if (!elements.isEmpty()) break;  тоже лучше не писать. Нужны скобки и все с новой строки.

Цитата(LSD @  18.4.2013,  10:59 Найти цитируемый пост)
Выделять исключения в отдельный пакадж не стоит, пусть лежат в том же в котором используются. 

Почему? По мне, так исключения лучше выносить в свой пакет исключений.
PM MAIL   Вверх
LSD
Дата 19.4.2013, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(blackbanny @  18.4.2013,  20:46 Найти цитируемый пост)
а где и в каком виде ошибки бы хранили?

Я плохо представляю какого рода ошибки могу быть, но в целом я бы сделал так:
- если ошибка фатальная и вообще никакой информации о домене не удалось получить - выбрасываем эксепшн
- если поличили информацию что такой домен не существует, создаем DomainInfo у которого ставим статус Not found (статусы я бы сделал enum-ом)
- если информацию удалось получить но лишь частично создаем DomainInfo у которого ставим статус partialy resolved
- если информацию удалось получить в полном объеме - то статус ОК

Цитата(blackbanny @  18.4.2013,  20:46 Найти цитируемый пост)
наверное не информацию о домене, а сам домен?

Ну да, имелся в виду URL домена.

Цитата(blackbanny @  18.4.2013,  20:46 Найти цитируемый пост)
логирование в главном классе проекта - DomenInformation

Этого явно недостаточно. Нужно еще добавать логгирование в код который парсит информацию о домене, чтобы в случае проблем понять что там происходит.


Цитата(Samotnik @  18.4.2013,  23:40 Найти цитируемый пост)
Почему? По мне, так исключения лучше выносить в свой пакет исключений. 

А смысл отделять исключение от того кода с которым оно связано? Посмотри на JDK, там исключения лежат в тех же пакаджах что и классы которые их используют.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
blackbanny
Дата 19.4.2013, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 18.11.2009

Репутация: нет
Всего: нет



спасибо за ценные замечания! smile
Цитата(Samotnik @  18.4.2013,  22:40 Найти цитируемый пост)
1. DomenInformationConstants будет содержать только константы? Значит лучше сделать интерфейсом и убрать public static final 

планируется, что еще будут константы

Цитата(Samotnik @  18.4.2013,  22:40 Найти цитируемый пост)
2. Названия пакетов нужно продумать лучше, не желательно делать два одинаковых названия domeninformation 
   2.1 Наименования пакетов желательно в одном стиле. У тебя везде в ед-ом числе, а exceptions почему-то во множественном. 
   2.2 Если есть Main класс, я бы пакет так и назвал

переименовал

Цитата(Samotnik @  18.4.2013,  22:40 Найти цитируемый пост)
3. Не используйте System.out.println, логирование ведь подключено. К тому же в одном месте применять и то и то нет смысла.:

System.out.println пока что делается для себя, потом вместо этого будет присвоение значений GUI-элементам

Цитата(Samotnik @  18.4.2013,  22:40 Найти цитируемый пост)
1. Есть стандартные ворнинги, которые IDE подсвечивает, желательно их убрать. 

вроде все убрал, пришлось добавить @Override у методов и метод setUrl() в DomenInformationFromCyPr сделать final

Цитата(Samotnik @  18.4.2013,  22:40 Найти цитируемый пост)
2. с названиями беда: пакет checkurl класс CheckUrl  метод checkingUrl.   Я бы назвал пакет util, класс UrlResolver или UrlUtil (более общее, смотря что в классе будет).

переименовал, как вы посоветовали smile

Цитата(Samotnik @  18.4.2013,  22:40 Найти цитируемый пост)
3. Вот так if (!elements.isEmpty()) break;  тоже лучше не писать. Нужны скобки и все с новой строки.

скобки расставил

Сейчас, наверное, сделаю, как посоветовал сделать LSD:
Цитата(LSD @  18.4.2013,  12:04 Найти цитируемый пост)
Я бы сделал класс, DomainInfo который содержит в себе всю информацию о домене (включая ошибки парсинга, если возможна ситуация что информацию удалось получить лишь частично)


только немного не пойму, в каком виде и где хранить ошибки парсинга в этом классе? в переменных которые буду отвечать за информацию о домене, например, переменная owner содержит владельца, если не удалось спарсить владельца, то присваиваем owner = "не удалось определить владельца"; так ? 

Цитата(LSD @  18.4.2013,  12:04 Найти цитируемый пост)
И интерфейс DomainInfoResolver который будет на вход получать информацию о домене и возвращать DomainInfo

с интерфейсом не совсем понял... и может тогда класс DomenInfo сделать внутренним классом DomenInformationBase?

PM MAIL   Вверх
LSD
Дата 19.4.2013, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(blackbanny @  19.4.2013,  12:50 Найти цитируемый пост)
только немного не пойму, в каком виде и где хранить ошибки парсинга в этом классе? в переменных которые буду отвечать за информацию о домене, например, переменная owner содержит владельца, если не удалось спарсить владельца, то присваиваем owner = "не удалось определить владельца"; так ? 

Добавляешь переменную которая содержит ParseStatus
Код

public enum ParseStatus {
  OK,
  NOT_FOUND,
  PARTIALY_RESOLVED  
}



Цитата(blackbanny @  19.4.2013,  12:50 Найти цитируемый пост)
с интерфейсом не совсем понял... и может тогда класс DomenInfo сделать внутренним классом DomenInformationBase?

Я имел в виду, что должен быть отдельный класс который хранит в себе информацию о домене. И отдельный класс который эту информацию получает. И раз уж у тебя планируется несколько источников получения информации, то DomainInfoResolver я предложил сделать интерфейсом.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
blackbanny
Дата 25.4.2013, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 18.11.2009

Репутация: нет
Всего: нет



переделал проект, вроде, как советовал LSD, остались только комментарии и логирование
ссылка
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0833 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.