Home

Advertisement

Previous | Next

Про джаву

  • Apr. 3rd, 2009 at 5:15 PM

Был недавно у меня разговор с [info]bratelnik-ом про джава-программистов. Как-то так сложилось, что на нескольких asp.net-ных проектах довелось побывать, которые начаты были гражданами из мира джавы. Может они не со зла, и не для науки, конечно, а так, позырить (с), но я не удержался и сделал ряд метких наблюдений.

Проекты обладали рядом характерных черт. Сейчас я вам расскажу как строят джаваисты.

Изначально закладывается такая архитектура, в которой много слоев и абстракций. В теории одна маленькая финтифлюшка может работать на отдельном кластере, который спрятан под горой в бронерованном бункере в Швейцарии, а другая загогулина может вертеться на чьем-то мобильном телефоне. Но что самое крутое, программисту который будет дергать за шнурок А на загогулине, который через 3 брокера и 5 проксей подключен к звонку Б на финтифлюшке, не надо ни о чем беспокоиться, потому что все прозрачно и абстрактно!

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

Если какие-то настройки не в XML, то надо обязательно их туда загнать. Можно даже иногда в XML писать немножко кода, который потом будет компилироваться на ходу.

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

Dependency Injection обязательно надо делать как можно запутанее, чтобы новички потом под собой мочили стулья от неожиданности, когда у них код, удаляющий базу, вдруг откуда-то чудесно вызвался.

Реализовывая свои фичи, желательно ломать поведение стандартных библиотечных, на замену которым это пишется. Например, вываливать эксцепшн на три экрана, когда пользователь нажал кнопку "назад" в браузере. А еще лучше перепутать сессии и дать этому пользователю данные другого собрата по несчастью.

Вот например взялся джаваист складывать два числа, скажем 2 + 2.

Надо несколько уровней абстракции. Один - на цифры. Вдруг сегодня арабские, а завтра римские надо будет или вообще клинопись?
Второй уровень - на тип операции. Это сегодня мы складываем, а вдруг завтра надо будет лексический парсинг Клингона делать, пусть будет, про запас.
Третий - на тип пространства. Это сейчас оно линейное, а завтра ну как надо будет мнимые числа складывать? Записываем.

Это все конечно должно через брокеры друг с другом разговаривать, быть потокобезопасным и масштабируемым, чтобы при желании эту операцию можно было запустить на распределенном кластере из маков, пи-си и приставок сони плейстешн.

Об ошибках тоже не надо забывать. Надо чтобы при ошибке приложение вылетало с малопонятным сообщением типа "ERR402A77: Could not parse node 'XlmSignal'", и чтобы ошибку было хрен отловить отладчиком, т.к. она возникла в сгенерированном автоматически коде (см выше XML).

Примерно вот так.

Боже, дай мне нормальную работу!

Comments

( 36 comments — Leave a comment )
[info]sandlex wrote:
Apr. 3rd, 2009 07:10 am (UTC)
хы. запостите в ru_java комьюнити :)
я, как java-программер, поржал
[info]kr0m wrote:
Apr. 3rd, 2009 07:20 am (UTC)
Я там не член :)
[info]bratelnik wrote:
Apr. 3rd, 2009 10:00 am (UTC)
Афтар забыл указать, что у нас, джавистов, еще пар из носа идет и хвост сзади болтается, а наши тени приходят к дотнедчикам по ночам в страшных и запутанных снах.
Нам нужно что-нить такое же написать про доднедчиков, одни методы с большой буквы чего стоят. :-)
[info]kr0m wrote:
Apr. 3rd, 2009 10:09 am (UTC)
сделай аватару :)
[info]sandlex wrote:
Apr. 3rd, 2009 10:19 am (UTC)
да ну в одном слове "дотнетчег" уже что-то есть. а еще в с++ вроде были указатели на указатели указателей. не знаю, для дотнета это еще актуально или нет.
[info]highlander_spb wrote:
Apr. 3rd, 2009 11:56 am (UTC)
Это не модно. Нынче модно заниматься магией вроде вычислений чисел фибоначчи во время компиляции.
[info]de_gis wrote:
May. 30th, 2009 03:18 am (UTC)
не-не, - пар, хвост, тени - это атрибуты иного мира.
И мир этот - PHP.
Афоризм Тиграна, прижиышийся в Bytex - "Программисты, которые писали при жизни плохой код, потом в аду до конца своих дней программируют на PHP."
[info]bratelnik wrote:
Apr. 3rd, 2009 10:00 am (UTC)
5+!
[info]highlander_spb wrote:
Apr. 3rd, 2009 11:37 am (UTC)
(Из-за кадра доносилось задавленное ироничное хихиканье сиплюсплюсника-рецидивиста).
[info]kr0m wrote:
Apr. 3rd, 2009 11:39 am (UTC)
Сиплюсплюсникам от меня тоже достанется, если работа конечно подвернется. Однако искренне надеюсь, что не подвернеться. :)
[info]highlander_spb wrote:
Apr. 3rd, 2009 11:54 am (UTC)
Нас, сиплюсплюсников, лучше не трогать.
А то такое сферическое метапрограммирование в вакууме начинается, что бита на бите не останется!

:)
[info]kr0m wrote:
Apr. 3rd, 2009 11:58 am (UTC)
А еще говорят что в мире есть некто сишники (без плюсов), и что они тех кто с плюсом якобы на обед едят.
[info]highlander_spb wrote:
Apr. 3rd, 2009 12:06 pm (UTC)
У них, обоих кто еще не в маразме, зубов уже нет нас есть :)
[info]kr0m wrote:
Apr. 3rd, 2009 12:07 pm (UTC)
не укусят, так засосут!
[info]highlander_spb wrote:
Apr. 3rd, 2009 12:08 pm (UTC)
Вах, уже баюс!
[info]dreamplayer wrote:
Apr. 3rd, 2009 12:45 pm (UTC)
У тебя талант писать - издавай книжку про яву глазами дотнетчика - я еще таких не читал :)
[info]kr0m wrote:
Apr. 3rd, 2009 12:47 pm (UTC)
Спасибо Макс :)
Когда в бакетбол?
[info]nemoau wrote:
Apr. 5th, 2009 10:24 pm (UTC)
Аффтор, жжОшь! Пеши исчо!
Не, на самом деле, Артем, Ынтересно написал, мне понравилось читать ;-)
[info]kr0m wrote:
Apr. 5th, 2009 10:55 pm (UTC)
против пеара не возражаю :)
[info]naus wrote:
Apr. 7th, 2009 01:36 am (UTC)
А что делать!? Скучно нам на работе. Некуда творческую энергию девать! ;)

кстати про XML это у тебя какие-то отсталые джавоведы. нынче модно annotations.
[info]kr0m wrote:
Apr. 7th, 2009 01:38 am (UTC)
линк, пожалуйста.
[info]naus wrote:
Apr. 7th, 2009 01:45 am (UTC)
В принципе про annotations -
http://java.sun.com/docs/books/tutorial/java/javaOO/annotations.html

В spring 2.5 по-моему вообще все можно сделать в annotations, хорошего туториала навскидку не нашел, но например вот:
http://www.springindepth.com/book/annotation-based-bean-config.html

Вот про JPA annotations
http://www.zabada.com/tutorials/hibernate-and-jpa-with-spring-example.php
[info]jbaruch wrote:
Oct. 28th, 2009 08:44 am (UTC)
Такое впечатление что этот пост написан году так в 2002. Ну, или код про который вы рассказываете написан в 2002, и этот код - кривая имплементация SOAP/WSDL. Потому что сегодня никто никаких xml-ей и брокеров не пишет, и к SOAP/WSDL и близко не подходит. А кто подходит - тому руки оторвать.
[info]kr0m wrote:
Oct. 28th, 2009 09:48 am (UTC)
Вы знаете, код действительно древний. Однако я сейчас на проекте со спрингом, и надо сказать не сильно лучше - оно конечно IOC/DI всякие удобно, но отсутствие элементарных тулзов для поиска в xml/рефакторинга честнто говоря напрягаяет.

Спрашивал на стековерфлоу, никто ничего толком не посоветовал, может вы знаете?

http://stackoverflow.com/questions/1523517/refactoring-tool-for-spring-net
[info]jbaruch wrote:
Oct. 28th, 2009 10:18 am (UTC)
а зачем XML для спринга-то?
[info]kr0m wrote:
Oct. 28th, 2009 12:06 pm (UTC)
В нём объявляеться весь контекст.
[info]jbaruch wrote:
Oct. 28th, 2009 12:26 pm (UTC)
Контекст прекрасно обьявляется аннотациями и джава классами. ХМЛ мастдай.
[info]kr0m wrote:
Oct. 28th, 2009 12:42 pm (UTC)
Интересно, а если чего-то поменял, надо опять пересобирать проект?
[info]jbaruch wrote:
Oct. 28th, 2009 12:56 pm (UTC)
Вообще-то во время разработки ничего пересобирать не надо, благо есть dynamic classloading, который меняет изменненые классы прямо в runtime. Но для любителей можно и XML, ага.
[info]kr0m wrote:
Oct. 28th, 2009 01:01 pm (UTC)
Интересует именно задеплоенная апликуха.

А чем так хороши аннотации по сравнению с XML?
[info]jbaruch wrote:
Oct. 28th, 2009 01:26 pm (UTC)
задеплоенную можно "подлатать" XML-ной заплаткой до нового релиза, в котором весь meta-data убрать обратно в код.

1. annotations это код, а не текст. refactoring, code completion, etc.
2. Когда мне не нужно говорить, что я хочу конфигурировать, а только как я хочу конфигурировать, да еще и делаю это одним словом, а не тэгом в ХМЛ, мой metadata значительно меньше. Значительно.
3. Смотря на код, всегда знаешь его конфигурацию. Не нужно думать "тут написано одно, но это ничего не значит, потому что в ХМЛ может быть написано еще второе и третье"

Ну, это так, по верхам.
[info]jbaruch wrote:
Oct. 28th, 2009 10:23 am (UTC)
а, это spring.net? Понятия не имею. В Java все бы рассказал и показал, а в .net - не знаком. Сам ReSharper не умеет?
[info]kr0m wrote:
Oct. 28th, 2009 12:10 pm (UTC)
resharper, несмотря на всю крутость, не умеет, самая тулза полезная на текущий момент это search/search-replace.

А что, в джавовом спринге уже нет XML?
[info]jbaruch wrote:
Oct. 28th, 2009 12:27 pm (UTC)
Ну, в виде backwards compatibility есть, но в новых проектах, конечно, не нужен XML.
[info]syarzhuk wrote:
Nov. 2nd, 2009 11:56 pm (UTC)
Не джавой единой
Я когда-то работал с чуваком, который был весь из себя .Net архитектором. У него было "всё написано", но почему-то не работало, и меня попросили разобраться, в чём дело. После нескольких дней настроек и дебага и продирания через пять или шесть уровней абстракции (которые просто пересылали данные дальше, обычно не делая никакой полезной работы) наконец дошёл до ключевой строчки. Она вычитывала
из какого-то XML файла имя метода, который надо было вызвать, и вызывала через reflection. Визуальная студия заходить внутрь такого метода отказывалась, справедливо говоря, что ни хера не знает, что там у вас такое вызывается. Я пошёл к архитектору спрашивать, как он сам это дело дебагил, в ответ получил очень удивлённый взгляд, такое впечатление, что его словарь только что пополнился новым термином. В общем, я насовал записей в лог в stored процедуру, которая в результате вызывалась, и отловил-таки бага :)
[info]kr0m wrote:
Nov. 3rd, 2009 12:05 am (UTC)
Вы правы, это не джава-специфично. Людям порой так нравится процесс строительства, что они о конечной цели немного забывают.
( 36 comments — Leave a comment )

Tags

Latest Month

September 2009
S M T W T F S
  12345
6789101112
13141516171819
20212223242526
27282930   
web stats
Powered by LiveJournal.com
Designed by Lilia Ahner