![]() |
Модераторы: LSD, AntonSaburov Страницы: (29) « Первая ... 4 5 [6] 7 8 ... Последняя »
( Перейти к первому непрочитанному сообщению ) |
![]() ![]() ![]() |
|
diablero |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
maxConnections = 90. Потому что посмотрев доки mySQL, обнаружил эту цифру, как максимально число подключений. Исходя из своего опыта, скажи, какие должны быть значения по умолчанию?
Это сообщение отредактировал(а) diablero - 21.6.2007, 18:01 -------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
||||
|
|||||
Stampede |
|
||||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Так-так, минутку... А что же это ты так смело присваиваешь значения переменным?
А если параметр отсутствует в пропертях? Для чего же мы тогда заводили дефолтные значения? Кроме того, если в конфиге будет пропущен параметр max.Connections, то прога вообще не запустится, так как вылетит по NullPointerException. Так что тут-то как раз проверки нужны. И по поводу исключений. Вот мы наконец и столкнулись с ситуацией, когда игнорировать их нельзя, поскольку они чекнутые (checked). Совсем-то их молчком проглатывать, как у тебя - это тоже не дело. Давай пока сделаем так: в тех местах, где может выбрасываться чекнутое исключение, будем оборачивать его в RuntimeException и пробрасывать наверх:
В общем, надо исправить. Когда сделаешь - потести с пропущенными параметрами конфига, вплоть до полностью пустого файла. Убедись, что в этом случае подхватываются дефолтные значения. Да, и по поводу параметра maxConnections. Если честно, совершенно пофиг, чему он будет равен. Мы все равно будем использовать пул соединений. Я просто хотел, чтобы у нас был какой-нибудь числовой параметр - чтоб служба медом не казалась ![]() -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
||||
|
|||||
diablero |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
Подправил.
Это сообщение отредактировал(а) diablero - 21.6.2007, 22:50 -------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
|||
|
||||
Stampede |
|
|||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Вообще-то я немного не такой подход имел в виду. Я хотел бы, чтобы все параметры конфига фиксировались именно в переменных, а не вытаскивались "на лету" из пропертей. Одна из причин заключается в том, что нам может со временем понадобиться перейти на другой формат конфигурации, например XML. А коль скоро у нас доступ к параметрам уже "зашит" в коде геттеров, то придется все менять.
То есть еще раз: идеологически правильнее сделать так, чтобы класс конфигурации мало зависел от формата хранения. Для этого формато-зависимый код надо как можно сильнее локализовать и изолировать. У нас для этого есть функция load(). Тогда с переходом на другой формат мы просто перепишем этот метод - и всех делов. Если сильно захочется, можем даже оформить в виде иерархии классов. Но это в данном случае будет, пожалуй, overkill. ЗЫ: Еще раз напоминаю: не надо редактировать код в ранее написанных постах. Люди ведь не поймут, о чем мы тут говорим. -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
diablero |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
Подправил. Часть 2
-------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
|||
|
||||
Stampede |
|
||||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Ага, теперь такой момент: зачем нам классовая переменная ptoperties? Смотри, ты объявляешь ее в одном месте, создаешь для нее объект в другом, а используешь - в третьем. У Блоха на этот счет есть даже отдельное правило:
А Блох - это товарищ, который знает, о чем говорит ![]() Когда ты сделаешь переменную properties локальной для блока try, ты перестанешь ее видеть в том месте, где у тебя извлекаются значения параметров. Пофиксить можно переносом этих строк вовнутрь блока try. И еще по поводу параметра max.Connections. У тебя сейчас вот так:
Но тут по-хорошему надо бы различать два случая - когда параметр просто отсутствует, и когда он не является валидным целым. В первом случае надо просто присвоить дефолтное значение, а во втором - это на усмотрение. Я бы так и не ловил его вовсе, благо оно не чекнутое, или ловил и оборачивал в другой RuntimeException, с подробным указанием причины. -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
||||
|
|||||
diablero |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
Давай оставим пока так. А позже уже определимся куда и что будем делать со всеми исключениями. -------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
|||
|
||||
diablero |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
Понял всю глубину. Такая задержка в понимание из-за столь позднего времени. ![]() Уже скоро на работу, посплю чуток. Днем подправлю. Может еще одно задание? ![]() -------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
|||
|
||||
Stampede |
|
|||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Нет, нам нужно сначала подвести важную черту. Зафиксировать, тыкскыть, достигнутое. Так что до завтра. -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
Я обычно решаю эту проблему так: создаю класс Config, а в нем - внутренний класс ConfigReader. В случае изменения формата хранения - будет правиться ConfigReader, который никем, кроме самого Config не используется --> хорошо локализован. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
Stampede |
|
|||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Вот, обрати внимание, diablero - batigoal приводит очень хороший пример разбиения компонентов по границе функциональной ответственности, причем имено в технике ООП, специфической для Java - с использованием внутрених классов. Это и есть то, что называется "слабо связанными" (loosely coupled) компонентами. Тут уже нетрудно увидеть, как можно развить этот подход таким образом, чтобы вообще ничего не править, а просто по мере надобности использовать тот или иной ридер конфига. Например, завести отдельно:
Но тут я еще раз напоминаю, что мы не пытаемся написать компонент общего назначения, и раньше времени вводить излишнюю гибкость нам ни к чему. В английском языке есть хорошая поговорка: "we'll cross that bridge when we come to it" (когда дойдем до моста, тогда и будем по нему переходить). Она хорошо передает суть "шустрого программирования"(agile programming) - начинай с самой простой реализации, которая только будет работать. Важно только, чтобы в этой реализации было как можно меньше "закладок", которые впоследствие затруднят нам функциональное дробление компонент, как это имело место с твоей ранней версией получения параметров конфига. А вообще в борьбе внутреннего Шустрого Программиста и ОО Архитектора внутри себя, программист должен доминировать безоговорочно, и если что - не стесняясь бить архитектора по рукам, чтоб не терял чувства реальности ![]() batigoal, спасибо за удачное развитие темы. Это сообщение отредактировал(а) Stampede - 22.6.2007, 12:19 -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
diablero |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
мини-фабричка
Это сообщение отредактировал(а) diablero - 22.6.2007, 13:26 -------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
||||||
|
|||||||
Stampede |
|
|||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
НЕТ, НЕТ, НЕПРАВИЛЬНО!
Я же говорю, НЕ НАДО раньше времени ваять лишний ООП! Пожалуйста, верни все как было, у тебя же уже все было почти хорошо, за исключением чтения maxConnections. А если уж говорить о разбивке на классы... Зачем ты перенес переменные в ридеры? Переменные конфигурации должны быть именно в классе конфигурации. Поясняю еще раз. Вот есть класс конфигурации. Он знает (и может выдавать) только те переменные, которые мы в нем пропишем. Как эти переменные инициализируется, откуда берутся значения для них - его не колышет абсолютно, для этого есть вспомогательные классы-ридеры. И ридеры не дублируют переменные конфига - они работают непосредственно с приватными полями класса Configuration. Поэтому-то batigoal и подчеркивал, что классы объявлены как внутренние - чтобы у них был доступ к этим полям. Но я еще раз повторяю, не надо нам этого пока. Так что вертай все взад. -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
diablero |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
Вернул как было, и исправил ситуацию с maxConnections
-------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
|||
|
||||
Stampede |
|
|||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
И опять неправильно. Правильно (почти) было в том вариенте, который ты запостил перед тем как пойти спать. Вот этот вот:
Там все, что нужно доделать - это проверять на null значение properties.getProperty("max.Connections"), и обрабатывать отдельно. Ты же говоришь, что понял этот момент. diablero, может ты не выспался? Я серьезно. Добавлено через 3 минуты и 59 секунд diablero, извини, не заметил вот это: String.valueOf(maxConnections). Значит, осталась только классовая переменная properties. -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |