![]() |
Модераторы: LSD, AntonSaburov Страницы: (29) « Первая ... 3 4 [5] 6 7 ... Последняя »
( Перейти к первому непрочитанному сообщению ) |
![]() ![]() ![]() |
|
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
Собственно со времени открытия темы успел поковырять J2ME(причем очень успешно) и Python, где впервые увидел РАБОТАЮЩУЮ реализацию ORM(в свое время хотел писать такое под пхп, но потом как-то поугас). Сейчас заказал себе трехтомник Дейтелов по джаве и кучу книг по теории программирования, но сейчас почему-то считаю, что при программировании опыт набирается гораздо быстрее, чем при чтении ) Тот же xmlpull освоился за 5 минут, в то время, как в книгах уделяют парсингу XML намного больше места и времени. Сейчас для себя поставил ряд целей, среди которых есть и сайт на джаве(на вашем фреймворке, кстати). Однако самая главная цель - дописать оставшиеся 90 страниц документации за следующие 15 часов, с чем и удаляюсь ;) |
|||
|
||||
fixxer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 14.9.2006 Где: Саратов, Россия Репутация: 4 Всего: 27 |
Да, вот это я наверное и сам как-нибудь освою. Просто мне очень импонирует Ваш подход когда ядро системы проектируется в отрыве от морды. Я сам об этом думал, но наверное опыта маловато. И в начале топика понял что процесс пойдет именно по этому пути. Но nerezus всех обломал. Поэтому и хотелось продолжить. Ну нет так нет. Да, если не сложно, поясните, пожалуйста, почему по Вашему мнению грамотная и не противоречащая здравому смыслу архитектура порой различаются. Как по мне так это нонсенс. Это сообщение отредактировал(а) fixxer - 24.5.2007, 21:47 -------------------- ![]() |
|||
|
||||
Hidrag |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 877 Регистрация: 9.4.2005 Где: JDK Репутация: 2 Всего: 25 |
Все правильно, это как автомобиль! Сборка начинается с двигателя и заканчивается уже кузовом - сначала логика и движок приложения, потом уже и гуишник или веб морда ко все этому крепятся.
-------------------- ![]() |
|||
|
||||
Stampede |
|
||||||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Привет, nerezus - скока лет, скока зим
![]()
Правильно считаешь. Книшки, конечно, пригодятся, хотя бы в качестве справочника, но без реальной практики программирования никакого опыта не прибавится. Причем речь не об учебных примерах, а именно о реальных проектах.
Похвальный выбор ![]() Теперь fixxer.
Я очень рад, что ты выделяешь этот аспект. Для многих это совсем не очевидно, так что комментарий Hidrag'а тут совершенно мимо кассы: и пример неудачный, и тезис не подкрепляется практикой - и мы к этому еще вернемся. Что касается продолжения сериала с твоим участием: понимаешь, нужна задача, цель. Нужно, чтобы ты зачем-то хотел довести дело до конца. Иначе все бросится на полпути. Только впустую потратишь свое и чужое время. Это я тебе как гносеолог со стажем говорю, ибо практика показывает, что эффективность когнитивного процесса напрямую определяется степенью мотивации. Ну и напоследок разъяснение. Эх, чувствую, начать придется издалека... Если взглянуть вокруг внимательным глазом, то нетрудно заметить, что нонсенсы такого рода окружают нас буквально повсюду. Вот навскидку пара примеров. Пример 1. В моей цифровой мыльнице (Кодак) при разряде батареек слетают все настройки. Приходится каждый раз выставлять их заново. Еб@н@фты! У вас в аппарате 32 мега встроенной энергонезависимой памяти - неужели нельзя было отвести кусочек под хранение настроек??? Пример 2. У меня в машине магнитола, часы и розетка под прикуриватель работают только при включенном зажигании. Нахера?! Где блин логика? Получается, если что-то надо (например, элементарно подзарядить сотовый или влючить музыку) - приходится вставлять ключ и включать зажигание. В результате пару раз на кемпинге приходилось заводиться прикуриванием. Примеров такого рода - миллион. О чем это говорит? О том, что мир не всегда и не во всем устроен в гармонии со здравым смыслом. Например, в случае с техническими девайсами наивный потребитель может думать, что рынок и конкуренция должны заставлять производителей выпускать изделия высочайшей степени функциональности, юзабилити и потребительских характеристик. А на деле выходит, что главное, к чему подталкивает рынок - к регулярному выпуску новых моделей. А какие они при этом получаются, всем ровным счетам наплевать. Примерно такая же петрушка и с софтом. Sun'у по большому счету пофиг, хорошо ли, удобно ли разрабатывать приложения под их спецификации. У них свой процесс разработки индустрийных стандартов. Достаточно непростой, надо заметить, процесс, и при этом взаимоувязанный со множеством других процессов: документрование, написание туториалов, разработка программ сертификации, работа с партнерами, и многое-многое другое. Неудивительно, что при таком положении дел многие вещи появляются на свет в виде, достаточно далеком от идеала - особенно учитывая концентрацию теоретиков во всяких комитетах по стандартам. Но раз уж появился - делать уже нечего: стандарт есть стандарт. И начинается "мыши плакали, кололись, но продолжали есть кактусы". Например, счастливо отведать Java DOM. Когда противоречия между желаемым и действительным достигают особой остроты - ну, приходится как-то реагировать. Как правило, перенимают решения, ставшие стандартом де-факто. Так появился EJB 3 (Hibernate), пакеты concurrent (oswego), logging (log4j) и многое другое. Но до многих вещей руки так и не доходят. Может, со временем вместо неработающего JAAS приспособят Acegi. Может, канонизируют легковесные контейнеры, взяв за основу Spring. Ну а пока - вот так, как есть. Так что ничего особенно необычного - не более, чем во всем остальном. Но разве кто-то обещал, что будет легко? ![]() -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
||||||
|
|||||||
fixxer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 14.9.2006 Где: Саратов, Россия Репутация: 4 Всего: 27 |
Stampede, спасибо за объяснение. Просто я пока архитектуру воспринимаю с точки зрения ООП, и привязка (увязка) технологического стека к domain model, это наверное следующий этап моего развития.
![]() -------------------- ![]() |
|||
|
||||
vzf |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 203 Регистрация: 10.9.2005 Репутация: 2 Всего: 5 |
Stampede, можете рассказать в каких случаях не работает JAAS и чем Acegi лучше.
P.S. Просто интересно ![]() --------------------
Java - Write Once, Test EveryWhere! |
|||
|
||||
Stampede |
|
|||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Нет, это будет оффтоп. Можете создать отдельную тему, если есть желание. -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
diablero |
|
||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
Пожелал стать новым учеником, и получил на это согласие.
Задача. Основная цель изучения это реализация своего проекта. Сайт не сложный, со стандартными сервисами ,к примеру, http://real-english.ru. log4j.properties. Пишет все в консоль и файл.
Это сообщение отредактировал(а) diablero - 20.6.2007, 10:05 -------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
||||||||
|
|||||||||
Stampede |
|
|||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
diablero, c почином!
![]() Для начала в общем неплохо. Замечания такие. 1. Название пакета. Принятая в Java схема именования пакетов помимо всего прочего служит цели по возможности разнести пространства имен разных производителей, дабы минимизировать риск конфликта имен. Для этого предлагается начинать название пакета с префикса, который хоть как-то гарантирует уникальность - с домена конторы, записанного задом наперед. То есть если у проекта Апачи есть домен apache.org, то пакеты Java, разрабатываемые под его крышей, имеют вид org.apache.*. Ты сейчас выбрал имя ru.infinite. Но домен infinite.ru уже существует, и если только это не твой домен (в чем я сильно сомневаюсь), то в будущем это может быть чревато ненужными осложнениями. Идеологически более правильно было бы пойти сейчас на сайт любого регистратора (например, www.webnames.ru) и если не зарегистрировать, то хотя бы подобрать себе свободный, незанятий домен. 2. Название проекта. Ты пока что просто подобрал название, доставшееся от nerezus'а, Hunger. Вряд ли это имя отражает суть твоего начинания. Между тем название проекта - это исключительно важный момент. "Как вы яхту назовете, так на ней и поплывете" (с) ![]() У меня еще есть замечания по коду, но давай мы сначала решим эти два вопроса. Это сообщение отредактировал(а) Stampede - 19.6.2007, 18:56 -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
diablero |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
infinite.ru был свободен.
Исправил... -------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
|||
|
||||
Stampede |
|
||||||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Смотрим:
Но да ладно. Значит, говоришь, ru.selfexpression? Ну что ж, нормально. А насчет Tools точно уверен? Больше походит на название класса-утилиты... Впрочем, хозяин - барин. Теперь следующее. Я бы хотел, чтобы ты создал папку, которая будет домашней директорией всей проги, а в ней такую структуру:
Далее, в командной строке запуска проги предусмотри два необязательных аргумента: (1) путь к домашней директории и (2) имя файла конфига. Дефолтным значением для первого пусть будет текущая (рабочая) директория, а для второго - какое-нибудь фиксированное имя, например, tools.properties. Содержимое log4j.properties придется подправить, чтобы он открывал лог-файл относительно домашней (а не текущей!) директории. По счастью, log4j понимает переменные окружения, так что это можно указать таким образом:
Соответственно, переменную tools.home нужно будет выставить в коде (через System.setProperty()) до вызова PropertyConfigurator.configure(fileName). То есть не в конструкторе, а в методе init(), потому что конструктору синглтона мы никакие параметры передать не сможем. Сам файл log4j.properties удобно будет засунуть в директорию conf, чтобы все конфиги были у нас в одном месте. Разумеется, при этом надо будет не забыть скорректировать логику формирования полного пути к этому файлу относительно домашней директории. Теперь по коду: 1. Конструктор класса Configuration пусть принимает имя файла конфига. Хорошо также отображать это имя в выводе описания конфига. Что-то вроде:
2. В самом конце метода init() надо будет дернуть метод Configuration.toString() и вывести полученную строку в лог. Так у нас будет сохраняться полная история, что, когда и с какими параметрами мы запускали. 3. Класс Tools не должен никому давать свой логгер! Я уже писал об этом. Log4j позволяет как угодно тонко настраивать уровни и форматы вывода, но вся эта логика основана на иерархии пакетов, и если мы предоставим себе возможность пользоваться одним общим логгером на всех, то сами спрвоцируем себя на "насилование" (abuse) полезного инструмента. 4. В классе test (кстати, в Java названия классов принято писать с большой буквы) нужно проанализировать аргументы командной строки, получить экземпляр синглтона, и запустить его инициализацию. Больше там ничего не нужно. Обо все остальном должен позаботиться главный клас приложения. Вот так вот пока. Это сообщение отредактировал(а) Stampede - 20.6.2007, 00:08 -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
||||||
|
|||||||
diablero |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
Отредактировал свой пост выше, в котором я код выкладывал. Потому, что есть парочку вопросов.
1. Чего - то я не пойму как быть с логером. В приватном конструкторе я его инициализирую относительно папки проета. А как быть при вызове метода init() ? Логер же нужно перенастроить. 2.
Я чего-то не могу понять как будет происходить логирование. Если не трудно покажи на коде. 3. Как задать имя лог файла? Через переменные окружения или там есть какой-то метод? Это сообщение отредактировал(а) diablero - 20.6.2007, 10:14 -------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
|||
|
||||
Stampede |
|
||||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Хорошо, смотри:
Теперь комментирую. Обрати внимание, что код стал намного короче. Это особенно важно для тестового класса. Если тесты делать длинными, то писать их будет в лом. А надо, чтобы было в радость ![]() Теперь по главномк классу. Я ведь тебе намекал, что в конструкторе ничего особо полезного сделать не получится, поскольку мы еще не знаем путь к домашней директории. Ну так и незачем тогда вообще его засорять - оставим его пустым. Сам по себе приватный дефолтный конструктор нам нужен, чтобы мы случайно (или кто-то другой по злому умыслу) не унаследовали от главного класса. Я также убрал лишние проверки и выбрасывания исключений. В том виде, в котором они у тебя были, от них пользы все равно никакой. Когда у нас наберется побольше кода, тогда и обсудим стратегию обработки ошибок, лады? Еще один важный момент в реализации синглтона: создавать инстанс надо прямо при объявлении статической переменной. Тогда он гарантированно создастся до первого обращения к методу getInstance(), что избавит нас от необходимости делать проверки и объявлять его синхронизированным. Это, в общем, азбука паттерна Синглтон. Ну вот, а теперь ты расскажи, что у тебя получается, и какие пока ощущения от работы над проектом. Да, укажи, какой IDE пользуешься. До связи. Это сообщение отредактировал(а) Stampede - 20.6.2007, 19:39 -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
||||
|
|||||
diablero |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 3.12.2006 Где: Аркхэм Репутация: 2 Всего: 5 |
Договорились.
Пока как все будет мне не ясно. Но уже из того что есть я извлек много пользы для себя. Одно дело изучать самому, другое, под руководством знающего человека. Ощущения только положительные, интерес не только не пропал, но и обострился ![]() Жду заданий...
IntelliJ IDEA 5.0 -------------------- Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ... |
||||||
|
|||||||
Stampede |
|
|||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Ага, отлично.
Давай теперь сделаем загрузку конфигурации из файла. Нужно также завести несколько переменных в конфиге и определить для них геттеры. Переменные такие:
Загрузку лучше вынести в отдельную функцию load(). Обрати внимание, что ключи для пропертей принято писать с маленькой буквы, разделяя слова точкой. Строки ключей можно определить как константы, хотя в общем не обязательно. Каждую переменную инициализируй дефолтным значением. Это позволит минимизировать объем конфигурирования. Метод toString() пускай выводит реальные данные конфига (непосредственно из переменных). Да, еще попрошу не редактировать исходный пост, а постить новый код. Это чтобы тем людям, которые позднее будут читать эту ветку, была более понятна логика изменений. -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |