Являются ли фреймворки, использующие генерацию байт-кода, создающие неплотные абстракции? - PullRequest
0 голосов
/ 09 апреля 2010

Суть в том, что если вы не понимаете абстракцию фреймворка, вы все равно можете декомпилировать его и понимать его, потому что вы знаете язык, например Джава. Однако, когда происходит генерация байт-кода, вы должны понимать даже более низкий уровень - байт-коды уровня JVM. Я действительно боюсь использовать любую из таких платформ, которых много. Большую часть времени я думаю, что причиной генерации байт-кода является просто отсутствие языковых функций, таких как метапрограммирование. Ты согласен? Каково ваше мнение и аргумент? Как вы решаете проблему с вытекающими абстракциями в этих платформах?

1 Ответ

2 голосов
/ 09 апреля 2010

Сначала простой ответ: используйте эти рамки осторожно, не каждый и не слишком много.

Вы правы в своем предположении, что генерация байт-кода обычно связана с обходом языковых ограничений, например внедрение зависимости. Устранение этих ограничений предоставляет мощные инструменты (spring, guice, hibernate), но когда дело доходит до этого, это уже не чистая Java (все еще чистая JVM), и, таким образом, имеет немного волшебства. Пока вы используете только один из этих инструментов, вы, вероятно, можете не заглядывать слишком глубоко внутрь. Но если вы начнете смешивать их, вам нужно понять их немного больше. Единственным вспомогательным фактором является предыдущее использование; если другие люди успешно интегрировали больше этих фреймворков и задокументировали это, вам, возможно, не стоит заглядывать слишком глубоко.

Если вы хотите использовать какой-либо инструмент, спросите себя:

  • Что я получу?
  • Работает ли он с другими моими инструментами?
  • Могу ли я использовать более простой инструмент?

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

Примеры:

  • на работе используем пружину + спящий режим. Это улучшение по сравнению с EJB (

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

...