Покинул форум
Сообщений всего: 20
Дата рег-ции: Авг. 2009
Помог: 0 раз(а)
Возник вопрос по документированию кода. Например есть некий класс, в нем метод который выкидывает исключение. Этот метод вызывается конструктором. Нужно ли документировать исключение в пояснениях конструктора?
Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011 Откуда: Владивосток
Помог: 8 раз(а)
Если метод кидает исключение тогда да, в Вашем случае оно не кидается в конструкторе.
----- просто ?: сложно
Мелкий
Отправлено: 16 Октября, 2013 - 09:55:19
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Мне кажется логичным указать это в комментарии ко всему классу. Что от использования класса можно ожидать исключение с таким-то именем.
Здесь надо решить, что важнее - документация кода или усилия, на это затрачивающиеся. Если комментарий надо исправить в двух местах - когда-нибудь это будет не сделано. А противоречивая документация хуже её отсутствия.
Хочу заметить по непосредственно коду - у вас очень загадочным образом размазаны настройки подключения. Почему dsn - в конструкторе, а логин и пароль - в подключении?
И раз класс явно называется DBSettings, то почему getDSN не в нём?
Почему сделано getProperty я понимаю, удобство обращения к массиву. Но почему бы для явным образом названного класса не повесить публичные getUsername, getPassword? Они лаконичнее, а изнутри могут проксировать к getProperty.
Ну и кидать исключения в конструкторе - не самая лучшая идея. Объект создаётся и больше не удаляется. В PHP это не столь важно, т.к. через доли секунды скрипт завершится и освободит все ресурсы, но стоит иметь в виду.
----- PostgreSQL DBA
lodar
Отправлено: 16 Октября, 2013 - 12:53:39
Новичок
Покинул форум
Сообщений всего: 20
Дата рег-ции: Авг. 2009
Помог: 0 раз(а)
Мелкий пишет:
Мне кажется логичным указать это в комментарии ко всему классу. Что от использования класса можно ожидать исключение с таким-то именем.
Здесь надо решить, что важнее - документация кода или усилия, на это затрачивающиеся. Если комментарий надо исправить в двух местах - когда-нибудь это будет не сделано. А противоречивая документация хуже её отсутствия.
Подумаю. Учту.
Мелкий пишет:
Хочу заметить по непосредственно коду - у вас очень загадочным образом размазаны настройки подключения. Почему dsn - в конструкторе, а логин и пароль - в подключении?
И раз класс явно называется DBSettings, то почему getDSN не в нём?
DSN - это же уже требование PDO. Поэтому его формированием занимается класс ответственный за соединение (создание экз. PDO). DBSetting чистый контейнер для входных данных, таких как имя юзера, бд и тд. Хотя возможно вы и правы.
Мелкий пишет:
Почему сделано getProperty я понимаю, удобство обращения к массиву. Но почему бы для явным образом названного класса не повесить публичные getUsername, getPassword? Они лаконичнее, а изнутри могут проксировать к getProperty.
Создавал на скорую руку. Идея такая посещала. Переделаю.
Мелкий пишет:
Ну и кидать исключения в конструкторе - не самая лучшая идея. Объект создаётся и больше не удаляется. В PHP это не столь важно, т.к. через доли секунды скрипт завершится и освободит все ресурсы, но стоит иметь в виду.
Учту. Не подумал.
А вообще я либу пишу для себя. За основу взял из фреймворка Yii. Выложил на github. Был бы очень признателен в любой критике.
Покинул форум
Сообщений всего: 20
Дата рег-ции: Авг. 2009
Помог: 0 раз(а)
Мелкий пишет:
И раз класс явно называется DBSettings, то почему getDSN не в нём?
Почему сделано getProperty я понимаю, удобство обращения к массиву. Но почему бы для явным образом названного класса не повесить публичные getUsername, getPassword? Они лаконичнее, а изнутри могут проксировать к getProperty.
Поправил, исходя из вашего замечания. В общем жду критику, и хотелось бы побольше))). Спасибо.
tato
Отправлено: 17 Октября, 2013 - 04:37:08
Посетитель
Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011 Откуда: Владивосток
Могут возникнуть проблеммы если нет такого значения. (Добавление)
Вообщем в лику напиши если интересно.
----- просто ?: сложно
lodar
Отправлено: 17 Октября, 2013 - 10:18:37
Новичок
Покинул форум
Сообщений всего: 20
Дата рег-ции: Авг. 2009
Помог: 0 раз(а)
tato пишет:
Могут возникнуть проблеммы если нет такого значения.
Я думал над этим, но потом решил, что если такого параметра не будет, то пусть лучше. возвращаться null. B док блоке описал @return соответствующий. На него и проверять (is_null), вместо "NOT SET". Или лучше вот так явно проверку проводить?
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
lodar пишет:
Я думал над этим, но потом решил, что если такого параметра не будет, то пусть лучше. возвращаться null.
Зависит от желаемого поведения. NOT SET - точно дурацкая идея, это потом по коду будут понапиханы проверки на равенство NOT SET. А у вас не хватает проверки на существование элемента, чтобы вернуть null. Иначе помимо null будет генерироваться E_NOTICE.
Это позволяет и легко находить не настроенные параметры и лаконично обрабатывать необязательные.
Иногда предпочтительнее выбросить исключение, если элемент жизненно важен.
----- PostgreSQL DBA
lodar
Отправлено: 17 Октября, 2013 - 22:40:22
Новичок
Покинул форум
Сообщений всего: 20
Дата рег-ции: Авг. 2009
Помог: 0 раз(а)
Мелкий пишет:
Это позволяет и легко находить не настроенные параметры и лаконично обрабатывать необязательные.
Иногда предпочтительнее выбросить исключение, если элемент жизненно важен
Спасибо. Учел.
tato
Отправлено: 18 Октября, 2013 - 02:47:34
Посетитель
Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011 Откуда: Владивосток
Помог: 8 раз(а)
Мелкий пишет:
NOT SET - точно дурацкая идея
NOT SET имел ввиду как случай, а не строкой забивать. (Добавление)
lodar пишет:
Чем лучше?
Если есть вызов функции в foreach, то лучше использовать array_walk, т.к. он для этого и предназначен. Код меньше и понятнее. array_walk работает медленнее, но в современных реалиях, если вы не прогоняете массив в over9000 записей, то не почувствуете разницы.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.