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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> почему в ява нет анотаций внутри методов? дилемные вопросы о архитектуре 
:(
    Опции темы
polosatij
Дата 29.9.2008, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

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



LSD, 

это, конечно, хорошо, когда есть магия, однако эта магия никак не задела тему if.. что ты скажешь по этому поводу?

Цитата(powerOn @  29.9.2008,  00:07 Найти цитируемый пост)
И напрасно вы его не видите. Лопата что бы копать, а топор что бы рубить. Не наоборот.


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

Цитата(Старовъръ @  28.9.2008,  14:50 Найти цитируемый пост)
Аннотации на каждый случай жизни все равно делать же не будешь. 


всего-то навсего десяток случаев и всё..

Цитата(ivg @  29.9.2008,  13:54 Найти цитируемый пост)
Автору топика "помогли бы" аннотации для участков кода. Но увы. 


немного не понял, что ты хотел сказать.. увы, такого нет?


--------------------
PM   Вверх
LSD
Дата 30.9.2008, 12:12 (ссылка) |    (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(polosatij @  29.9.2008,  22:12 Найти цитируемый пост)
это, конечно, хорошо, когда есть магия, однако эта магия никак не задела тему if.. что ты скажешь по этому поводу?

Повторю предыдущего оратора: прекрати забивать дрелью гвозди, и закручивать шурупы молотком smile 

Есть механизм управления выполнением кода: это условные операторы, циклы и т.п. А есть механизм добавления мета информации к коду. И это два совершенно разных механизма, предназначенные для разных целей. И почему один должен выполнять функции другого - совершенно непонятно.


--------------------
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   Вверх
polosatij
  Дата 30.9.2008, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

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



Цитата(LSD @  30.9.2008,  12:12 Найти цитируемый пост)
Есть механизм управления выполнением кода: это условные операторы, циклы и т.п. А есть механизм добавления мета информации к коду. И это два совершенно разных механизма, предназначенные для разных целей. И почему один должен выполнять функции другого - совершенно непонятно. 


Код

    /** {@inheritDoc} */
    @Test
    @TestSpec(number = "3.1")
    @TestCaseID(value = TestCaseIDConstants.ADD_UPDATE_ASHTAM_POSITIVE)
    @TestResult(state = EReplyListenerState.ON_POSITIVE_RESPONSE)
    public void testPositiveResponse() {
        execute(mRequest.getPositiveRequest());
    }


судя по вашей логике, мне не надо было писать анотации, а нужно было оставить "страшные" и тупо повторяющиеся конкструкции с if-ами или самому писать reflection.. таким образом я описал около 500 тестов за пару недель..

а чем не устраивает такой вариант? вся логика вынесена в setUp и tearDown, анотации помогают мыставить мета данные на запуск и на окончание данной методы.. так что же мешает или что плохого сделать такое на часть кода внутри методы вместо тупо "повторяющихся" if-ов?   smile 


--------------------
PM   Вверх
w1nd
Дата 30.9.2008, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

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



Цитата(polosatij @  30.9.2008,  17:58 Найти цитируемый пост)
судя по вашей логике, мне не надо было писать анотации, а нужно было оставить "страшные" и тупо повторяющиеся конкструкции с if-ами или самому писать reflection.. таким образом я описал около 500 тестов за пару недель..

Позвольте полюбопытствовать - где в вашем примере закодирован if?


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
polosatij
Дата 30.9.2008, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

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



Цитата(w1nd @  30.9.2008,  18:03 Найти цитируемый пост)
Позвольте полюбопытствовать - где в вашем примере закодирован if? 


Цитата(polosatij @  30.9.2008,  17:58 Найти цитируемый пост)
execute(mRequest.getPositiveRequest());


if successful
else unsuccessful

@TestResult ожидает именно такого результата в стеке от этой методы..  smile 


--------------------
PM   Вверх
w1nd
Дата 30.9.2008, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

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



Цитата(polosatij @  30.9.2008,  18:08 Найти цитируемый пост)
if successfulelse unsuccessful

Не вижу что-то. Конструкция if закодирована в tearDown(). Аннотация TestResult - не более, чем статичная метаинформация и ничего нигде не ожидает smile  


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
polosatij
Дата 30.9.2008, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

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



Цитата(w1nd @  30.9.2008,  18:15 Найти цитируемый пост)
Аннотация TestResult 


анотация TestResult, как и другая анотация ничего и ожидать не будет.. всё зависит от value стоящей в ней.. это такая же метаинформация, как и в моём первом примере в этом топике..  smile 



--------------------
PM   Вверх
LSD
Дата 30.9.2008, 18:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(polosatij @  30.9.2008,  19:19 Найти цитируемый пост)
анотация TestResult, как и другая анотация ничего и ожидать не будет.. всё зависит от value стоящей в ней.. это такая же метаинформация, как и в моём первом примере в этом топике..

А мета информацию кто обрабатывает? smile Не Демон-Гослинга же smile

Просто в данном случае часть кода вынесена в другое место и использует мета информацию в своей работе. Сама аннотация по прежнему ничего не делает.


--------------------
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   Вверх
Дрон
Дата 30.9.2008, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

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



Тут налицо явное непонимание smile

Цитата(polosatij @  30.9.2008,  18:58 Найти цитируемый пост)
судя по вашей логике, мне не надо было писать анотации, а нужно было оставить "страшные" и тупо повторяющиеся конкструкции с if-ами или самому писать reflection.. таким образом я описал около 500 тестов за пару недель..

А как выполняются эти тесты? Через reflection загружается список методов с их аннотациями, потом в зависимости от метаданных из аннотаций эти методы специальным образом вызываются. Аннотации то всё равно относятся не к коду метода, а к методу целиком. 

Как правильно сказал LSD, если ты поставишь аннотацию в произвольном месте, то кто её в этом случае должен обрабатывать? Аннотации -- они не исполняются сами по себе, они только интерпретируются каким-то отдельным обработчиком.

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


--------------------
Да. Именно так.
PM   Вверх
polosatij
  Дата 30.9.2008, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

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



Цитата(Дрон @  30.9.2008,  18:51 Найти цитируемый пост)
Аннотации то всё равно относятся не к коду метода, а к методу целиком. 


вот это вот жалко.. не было времени эксперементировать..  smile 

Цитата(Дрон @  30.9.2008,  18:51 Найти цитируемый пост)
Мощность компьютеров (и лень программистов) видимо ещё не дошла до того, чтобы делать вызов произвольного метода некоей отдельной сущностью, к которой можно цеплять и обрабатывать аннотации. 


ех.. smile



--------------------
PM   Вверх
Hroft
Дата 1.10.2008, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 20.10.2003
Где: Москва

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



Весь топик выглядит каким-то фарсом, если честно.
В чем заключается проблема, о которой столько понаписали? Хочется альтернативной записи большого количества условий, может быть? Можно закодировать условия в хэши по сравниваемым значениям или даже вычисляемым условиям, хранящие в значениях либо непосредственно инструкции к исполнению, либо вложенные деревья условий, обрабатываемые специальным методом. Те же самые аннотации-метаинформация получается, только без введения каких-то новинок в стандарт.
Цитата(Дрон @  30.9.2008,  18:51 Найти цитируемый пост)
Мощность компьютеров (и лень программистов) видимо ещё не дошла до того, чтобы делать вызов произвольного метода некоей отдельной сущностью, к которой можно цеплять и обрабатывать аннотации. 

Это не паттерн Command случаем?
PM MAIL ICQ   Вверх
Дрон
Дата 1.10.2008, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

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



Цитата(Hroft @  1.10.2008,  16:03 Найти цитируемый пост)
Это не паттерн Command случаем? 

Ну, в некотором роде -- да, только у меня ключевое слово "любого метода" smile
И, кстати, спасибо -- ты упоминанием паттерна подкинул мне идею, как обяъснить всю нелепость вопроса этой темы.
Вот исходный пример:
Код
            
@NotNull(notamAddress.getAddress())
@Equals(mSelectedNOF, notamAddress.getNOF())
mSeriesList.add(notamAddress.getSeries());

Если автор уж очень хочет делать аннотации к вызовам методов, то в нынешнем синтаксисе Java это выглядело бы как-то так:
Код

class ConditionalInvoker
{
    public static void invoke(Runnable command)
    {
            if (/* вот тут через reflection получаем нужные аннотации и проверяем условие */)
            {
                   command.run();
            }
    }
}

static void main(String[] args)
{
   ...
   ConditionalInvoker.invoke(new Runnable()
   {
        @NotNull(notamAddress.getAddress())
        @Equals(mSelectedNOF, notamAddress.getNOF())
        public void run()
        {
              mSeriesList.add(notamAddress.getSeries());                
        }
   });
}

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

PS: Я не уверен, что в аннотациях можно использовать такие конструкции (вычисляемые во время выполнения). Мне не приходилось с ними плотно работать и есть подозрение, что там можно использовать только константы. Так что может эту задачу вообще нереально решить аннотациями smile

Это сообщение отредактировал(а) Дрон - 1.10.2008, 15:53


--------------------
Да. Именно так.
PM   Вверх
polosatij
Дата 1.10.2008, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

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




Дрон, вот ты намутил  smile

мой вопрос был не написать wrapper, это бы я и сам смог.. мой вопрос был, почему "нет" анотаций вместо непрекращающихся if-ов  smile 


--------------------
PM   Вверх
fixxer
Дата 2.10.2008, 07:03 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

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



Цитата(polosatij @ 1.10.2008,  17:53)
Дрон, вот ты намутил  smile

мой вопрос был не написать wrapper, это бы я и сам смог.. мой вопрос был, почему "нет" анотаций вместо непрекращающихся if-ов  smile

А кто анотации бы обработал?

Я вообще не понимаю о чем спор. Нету такого и хорошо что нет и врятли когда-нибудь будет. А все остальное - это "Вот как бы нос Иван Иваныча да к лицу Иван Никифорыча" (с) Гоголь


--------------------
user posted image
PM MAIL ICQ   Вверх
Дрон
Дата 2.10.2008, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

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



Цитата(polosatij @  1.10.2008,  18:53 Найти цитируемый пост)
мой вопрос был не написать wrapper, это бы я и сам смог.. мой вопрос был, почему "нет" анотаций вместо непрекращающихся if-ов  smile  

Ты меня совсем не понял. Мой ответ был не о том, как написать обёртку, а о том, что для реализации того, что ты хочешь, каждый вызов любого метода должен быть завёрнут в подобную обёртку (пусть даже и неявно).

Цитата(fixxer @  2.10.2008,  08:03 Найти цитируемый пост)
Я вообще не понимаю о чем спор.

Угу. На этом объяснения заканчиваю, ибо до цели они не доходят  smile 

Это сообщение отредактировал(а) Дрон - 2.10.2008, 10:48


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

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

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


 




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


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

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