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

Поиск:

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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



2all agains annotations, 
не знаю не знаю ... в JPA ведь уже давно реализованы такие аннотации и они пользуются большой популярностью из-за своего удобства.

Цитата(Дрон @  3.10.2008,  09:32 Найти цитируемый пост)

@NotEmpty List<@NonNull String> strings = new ArrayList<@NonNull String>();

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


Это сообщение отредактировал(а) v2v - 3.10.2008, 13:19


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


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


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

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



За свою практику в C# я регулярно пользуюсь всего одной аннотацией (в .net они называются атрибутами), которая к тому же не влияет на выполнение или компиляцию кода: DebuggerStepThrough - говорит отладчику, что не надо заходить внутрь метода.
Помимо прочего эпизодически приходилось пользоваться атрибутами для контроля сериализации: вроде NonSerializable - аналог ключевого слова transient в Java, и ещё какими-то на эту тему, сейчас уже не вспомню.

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

В .net проблема "неприсвоения" null в некором роде решена просто, там есть структуры (value type), которые не могут принимать null (хотя основное назначение value type совсем другое). Простейший пример структуры - примитивные типы вроде int, double и т.п.
С другой стороны описанная проблема вызова ToString(), когда переменная равна null тоже в некотором роде решена оператором ?? в C#, то есть я могу написать (something ?? "zzz").ToString() и тогда в случае если something == null будет использована строка "zzz"
Но это всё частные случаи -- просто вспомнилось smile

Добавлено @ 13:31
Возможно, меня смущает плохая читаемость аннотаций в Java из-за их синтаксиса. В .net принято писать [BlaBlaBla] вместо @BlaBlaBla и это мне нравится, потому как @BlaBlaBla у меня блоьше ассоциируется с переменными в SQL.

Это сообщение отредактировал(а) Дрон - 3.10.2008, 13:36


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


Опытный
**


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

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



Цитата(v2v @ 3.10.2008,  13:19)
2all agains annotations, 
не знаю не знаю ... в JPA ведь уже давно реализованы такие аннотации и они пользуются большой популярностью из-за своего удобства.

Цитата(Дрон @  3.10.2008,  09:32 Найти цитируемый пост)

@NotEmpty List<@NonNull String> strings = new ArrayList<@NonNull String>();

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

Когда аннотации к месту они хороши. В JPA, EJB3, для декларативной демаркации транзакций, для IoC в spring и guice, для fine-grained security, при назначении аспектов, для сериализации JAXB, для вебсервисов. То есть в тех местах, где из задача ортогональна функционалу основного кода. А вот когда аннотации начинают влиять на исполнение самого кода или даже компиляцию - это имхо перебор.

Это сообщение отредактировал(а) fixxer - 3.10.2008, 13:37


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


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


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

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



Цитата(fixxer @  3.10.2008,  14:33 Найти цитируемый пост)
А вот когда аннотации начинают влиять на исполнение самого кода или даже компиляцию - это имхо перебор. 

В точку!

И, кстати, да -- хороший пример аннотации: декларативные транзакции, или декларативное security, мне правда не приходилось им на практике пользоваться, но "в домашних условиях" тестировал smile



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


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


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

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



Цитата(fixxer @  3.10.2008,  13:33 Найти цитируемый пост)
А вот когда аннотации начинают влиять на исполнение самого кода или даже компиляцию - это имхо перебор.

Вообще-то аннотации в первую очередь для "влияния на компиляцию" и создавались :whlistle А как раз аннотации, обеспечивающие транзакции/безопасность/etc - это и есть аннотации, влияющие на исполнение. Что-то господа ортодоксы ломанулись в другую крайность smile 

Это сообщение отредактировал(а) w1nd - 3.10.2008, 13:45


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


Эксперт
***


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

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



Цитата(v2v @  2.10.2008,  22:57 Найти цитируемый пост)
Если не ошибаюсь, Стандарт JSR-308 , который будет входить в 7ю яву , описывает как использовать аннотации вместе с типами (переменными).
например можно будет объявлять 
@NotNull
Integer a;
Но кроме этого будет возможность создавать свои аннотации с изощерённой логикой ... проверками, условиями и т.д...


всё-таки был смысл в поднятой моей теме  smile зачёт  smile  а то тут набросились на меня со всех сторон и пинают ногами  smile

хоть что-то новое узнали  smile 

Цитата(ecologist @  3.10.2008,  09:32 Найти цитируемый пост)
Я подозреваю, что меня тут сразу забанять за наезд, но по-моему Вы занимаетесь самолюбованием ...


человек говорящий это явно болеет самомнением.. 

---

тынц 



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


Leprechaun Software Developer
****


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

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



Цитата(polosatij @  2.10.2008,  17:02 Найти цитируемый пост)
всё равно тебе придётся в методу встроить throw "new RuntimeException()";
если проект большой, то занимаешься простой ерундой с copy & paste, причём никто тебе не гарантирует, что ты при больших объёмах, запаришься и просмотришь что-нибудь..

Все Exception должны быть за декларированы, в том числе и RuntimeException. И если разработчик базового класса, решил что этот метод можно не реализовывать, то ему надо просто за декларировать что метод може выбрасывать UnsupportedOperationException и проблема решена (в Collection API полно примеров такого подхода). Разница между:
Код

public void doIt()
{
  throw new UnsupportedOperationException();
}

и
Код

@NotImplemented
public void doIt();

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

А если тебе приходится в 100 классов реализовывать пустые методы и просто выкидывать в них исключение, то это опять же означает только плохое проектирование. Например в том же Collection API можно было бы сделать, два интерфейса List и унаследованный от него MutableList (при условии конечно, что востребованность ummutable листов было бы велика).



Цитата(polosatij @  2.10.2008,  17:02 Найти цитируемый пост)
я тебя понимаю, но это не всегда решается. у меня эта травла в проекте не решается..

Это проблема конкретного проекта и конкретных разработчиков, что у них хватило фантазии только на то, чтобы ошибку назвать Error. И вводить ради этого в язык новые сущности, не есть хорошо.


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


Опытный
**


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

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



Цитата(w1nd @ 3.10.2008,  13:45)
А как раз аннотации, обеспечивающие транзакции/безопасность/etc - это и есть аннотации, влияющие на исполнение. Что-то господа ортодоксы ломанулись в другую крайность smile

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

Код

@Entity
class Bean {...}


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

Код

@Transactional
void buisinessMethod() {
  /* some buisiness code */
}


То же самое. Эти аннотации предоставляют информацию другим частям проекта. Они инфраструктурные.


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


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


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

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



Цитата(fixxer @  3.10.2008,  14:22 Найти цитируемый пост)
Наличие или отсутствие анотации @Entity никаким образом не влияет на возможность мною использовать этот бин, ни на исполнение кода этого бина.

Да, пожалуй, я тут перебрал. 


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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



Цитата(fixxer @  3.10.2008,  14:22 Найти цитируемый пост)

То же самое. Эти аннотации предоставляют информацию другим частям проекта. Они инфраструктурные. 



Цитата(fixxer @  3.10.2008,  14:22 Найти цитируемый пост)
Наличие или отсутствие анотации @Entity никаким образом не влияет на возможность мною использовать этот бин, ни на исполнение кода этого бина

я бы так не сказал...
расскажу про грабли, о которые я сильно ударился, буквально вчера.
Делал я рефакторинг в своём проекте..
Есть у меня дао классы , которые работают через hibernate c бд - сохраняют, удаляют, обновляют , получают записи  :

Код

@Repository
@Transactional
class EntityADaoImpl{
// do actions ... 
}


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

создал:
Код

class AbstractDaoImpl{
// do basic actions ...
}

Ну и после расширил свои дао-классы этим родителем.

Запустил самописные тесты, которые перед этим выполнялись корректно: вроде бы всё Ок, данные пишутся, читаюсь, удаляются, обновляются ... ошибок нету. Но , немного спустя , заметил что в промежуточную таблицу, которую создаёт хибернэйт для отношения много-к-много никакие данные не сохраняются! Тоесть, не сохраняется именно отношение много-к-много ... это было очень странно, потому что во всех остальных отношениях (1-1,1-n,n-1) данные сохранялись правильно.

В общем, очень долго копал, перерыл весь свой код, написал кучу дополнительных тестов... ничего не помогло... Причина мне до сих пор не совсем понятна, я не поставил аннотации 
Код

@Repository
@Transactional

перед объявлением своего абстрактного класса!!!
ПОсле добавление этих самых аннотаций, всё стало на свои места... вот теперь скажите что аннотации не влияют на исполнение кода..




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


Leprechaun Software Developer
****


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

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



Цитата(v2v @  3.10.2008,  17:16 Найти цитируемый пост)
ПОсле добавление этих самых аннотаций, всё стало на свои места... вот теперь скажите что аннотации не влияют на исполнение кода..

Аннотации не влияют на исполнение кода на уровне JVM (а именно про это и говорит ТС). Но никто не мешает построить свою логику, основанную на данных из аннотаций.


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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



а возможно ли в аннотацию в качестве параметра передать переменную и как? 

Код

String s1 = "lala";

@SomeAnnotation(s1)            // <- ???
void someMethod(){
// ...
}



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


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


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

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



Аннотации - это статическая информация, доступная во время компиляции.


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


Опытный
**


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

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



Цитата(w1nd @ 3.10.2008,  17:31)
Аннотации - это статическая информация, доступная во время компиляции.

Не обязательно только во время компиляции
Цитата
public enum RetentionPolicy
extends Enum<RetentionPolicy>

CLASS 
          Annotations are to be recorded in the class file by the compiler but need not be retained by the VM at run time.
RUNTIME 
          Annotations are to be recorded in the class file by the compiler and retained by the VM at run time, so they may be read reflectively.
SOURCE 
          Annotations are to be discarded by the compiler




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


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


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

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



Цитата(fixxer @  3.10.2008,  17:47 Найти цитируемый пост)
Не обязательно только во время компиляции

Нет, вы цитату привели совсем не о том. Атрибуты аннотации должны быть вычислябельны на этапе компиляции.


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

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

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


 




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


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

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