[Фей Чао] Кодирование не стандартизировано, сколько строчек слез у коллег?

Java задняя часть
[Фей Чао] Кодирование не стандартизировано, сколько строчек слез у коллег?

предисловие

Место преступления

Мы определяем интерфейс в Dubbo, который использует вышеупомянутый欺骗性Именование, этоgetFeiChaoInfo()В нем нет возвращаемого значения.

Ок, тогда выставляем этот сервис и запускаем его. По предыдущей концепции Fei Dynasty нейминг не стандартизирован, просто немного противно разбираться, но запустить все же можно. Как только появится результат

Студенты, которые уже видели мой анализ исходного кода Dubbo, знакомы с этой службой.Согласно стеку исключений, мы быстро определили ключевую позицию.

Неважно, что вы даже не использовали Dubbo,javassistиCannotCompileExceptionЭти два ключевых слова могут угадать причину исключения.javassistОбычно используемый в работе байт-код,CannotCompileExceptionПо моему английскому в третьем классе начальной школы я знаю, что исключение не может быть составлено. Так почему же нет возможности его скомпилировать? Мы разобрали этот Dubbo, готовый к использованию.javassistСкомпилированный код форматируется с первого взгляда

После форматирования видно, чтоgetFeiChaoInfo()Этот метод не компилируется без возвращаемого значения. Итак, в настоящее время некоторые студенты хотят сказать, что в логике компилируемого кода сплайсинга Dubbo есть ошибка. Ввиду того, что на данный момент в паблике есть небольшое количество фанатов, которые не использовали Dubbo, давайте не будем обсуждать, почему Dubbo это делает, а подумаем над самим собой, само название вашего обманчивого метода имеет проблемы. принимает этот код Так что, если отказоустойчивость обеспечена хорошо, ваши нерегулярные привычки кодирования, даже если они будут успешными,偶然成功!,Не верю? Фей Чао покажет вам еще одно место преступления.

еще одно место преступления

В проекте мы часто сталкиваемся с проблемами конвертации DTO, BO, DO и др. Многие студенты используют для копирования Apache или Spring's BeanUtils. Возьмем набор тестов производительности.

Сцены Занимает много времени (1000000 звонков) принцип
получить/установить методы 22ms позвонить напрямую
Используя beancopiers 22ms На основе cglib изменить байт-код
Использование BeanUtils 12983ms отражение
Использование PropertyUtils 3922ms отражение

Кроме того, Фэй Чао подвел итог для всех.

Любой, связанный с отражением, является в основном низкой производительностью. Все, что связано с байтомным кодом, в основном высокая производительность.

Можно видеть, что при преобразовании между различными POJO самая высокая производительность должна быть связана с прямым оперированием get/set, но это определенно не элегантно. Из отчета о производительности видно, что лучшим решением является использование cglib.BeanCopiers.BeanCopiersКак пользоваться этим поиском сами узнаете, тогда давайте взглянем на место преступления. Чтобы использовать шаблон строителя, у нас есть коллеги, которые делают это

Хорошо. Затем запустите простую демонстрацию

Некоторые ученики впадают в панику, когда видят что-то ненормальное, и у них возникает иллюзия, что, хотя эта штука обладает высокой производительностью, она кажется нестабильной. На самом деле, дело не в том, что эта штука нестабильна, ключ в том, можете ли вы ее использовать или нет. Кроме того, мир меняется каждый день, кроме стабильного выпуска оригинальных творений Фэй Чаохуэй, что еще стабильно? С этой целью Фэй Чао резюмировал следующий здравый смысл для вас.

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

2. Когда атрибуты исходного объекта и целевого объекта имеют одинаковое имя и разные типы, атрибуты с одинаковым именем, но разными типами не будут скопированы. Также обратите внимание, что примитивные типы (int, short, char) и их типы-оболочки рассматриваются здесь как разные типы. Поэтому он не будет скопирован.

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

4. Исходный класс и целевой класс имеют одинаковые свойства (оба геттера существуют), но сеттер целевого класса не существует, и в это время будет выброшено исключение NullPointerException.

Ключ — наш целевой классFeiChaoBOМетод установки существует, так почему же это исключение все еще возникает? Очевидно, что метод нормального множестваvoidиз. Однако в этом случае метод set устанавливает возвращаемое значение, что является обманчивым. И даже если вы хотите использовать режим строителя, это не так.Если вы вернетесь на 10000 шагов назад, режим строителя в целом такой же.buildНазовите метод set, а не изменяйте его.

Вы обратите внимание на наблюдение за этими двумя случаями, нашли ли вы какие-то общие черты?javassistиcglib, эти две платформы лучше всего умеют манипулировать байт-кодом, поэтому ониsetиget, они все такие же чувствительные, как чистый Фей Чао на белой бумаге! Поэтому рекомендуется, чтобы старые водители не передвигались случайно.

Кроме того, по словам Фей Чао, ошибка этой cglib заключается в3.1Более поздние версии исправлены, но3.1версия, используемая в настоящее время база по-прежнему очень велика

расширить мышление

Поклонники, читавшие статьи Фэй Чао, знают, что Фэй Чао неоднократно подчеркивал, что необходимо глубокое мышление.У нас есть бесчисленное множество ям в развитии, и невозможно наступить на них все.Главное — пройти через яму, глубоко подумать и повысить осведомленность о кодировании! Итак, следуя старой рутине, давайте посмотрим, как мы попытаемся выжать какую-то полезную информацию на основе этого опыта.

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

Продолжим сжимать.Некоторые инструменты логического метода get будут генерировать isXXX.На самом деле это яма.Конечно не исключает что ваш проект в пасти у толстяка.偶然成功государство.

Можно видеть, что именование — это великое знание, и стандартизированное именование очень важно, например肥朝Такое известное название явно получено после глубокого мышления. Иногда я действительно завидую всем, есть так много красочных историй каждый день, в отличие от меня, простое слово «жир» проходит через мою жизнь!

напиши в конце

Эта статья — только вершина айсберга,Сотни оригинальных галантерейных товаров все еще в пути,Отсканируйте QR-код нижеСледуйте за Фей Чао,Позвольте вам, кто рожден, чтобы построить ракеты, перестать обижаться и прикрутиться!