Пожалуйста, указывайте первоисточник при перепечатке, спасибо!
причина
Руководство по разработке Ali JAVA издается давно, и оно достойно серьезного изучения, рассмотрения и популяризации.
- Официальный стандарт Ali для спецификации кода Java, это руководство по разработке не только регулирует некоторые детали разработки, но также предлагает множество инженерных принципов разработки, которые стоит прочитать.
- Можно сказать, что он всеобъемлющий и затрагивает почти все аспекты ежедневной разработки Java.
- Каждая из них — яма, на которую наступили предшественники, подведенные через уроки крови.
- Для всех Java-разработчиков действительно полезно иметь возможность публиковать его.
- В руководстве по разработке подробно описано, как разрабатывать более эффективно, отказоустойчиво и более совместно, стремиться узнать, что верно, а что нет, и комбинировать положительные и отрицательные примеры для улучшения качества кода. Например, различное нестандартное поведение при обработке журнала исключений, различные ямки для преобразования коллекций, OOM очереди ожидания, возникающий при создании пулов потоков и т. д.
Действительно, руководство по разработке Ali JAVA стоит прочесть и обдумать, каждое из которых представляет собой яму, на которую наступили предшественники, и подведено через кровавые уроки. Итак, сегодня я поделюсь некоторыми своими размышлениями и пониманием.
Прочитав это, я думаю, что главноеЦикломатическая сложность, Поскольку код написан людьми и должен поддерживаться людьми, если он достаточно сложен, вероятность ошибок при написании очень высока, а сопровождение очень сложно понять, и если его нужно будет расширить позже, это очень сложно, становится очень сложно добавить очень простую функцию (думаю, у каждого должен быть такой опыт).
Цикломатическая сложность
Цикломатическая сложность — это мера сложности кода.
В концепции тестирования программного обеспечения цикломатическая сложность используется для измерения сложности структуры решений модуля, которая выражается в количестве независимых линейных путей, то есть минимальном количестве путей, необходимых для разумного предотвращения ошибок.Высокая цикломатическая сложность свидетельствует о том, что программный код может быть некачественным и сложным для тестирования и сопровождения.По опыту, возможные ошибки программы тесно связаны с высокой цикломатической сложностью.
Посмотрите на верхнее руководство по разработке Ali JAVA, которое он упоминает,Если вам нужно использовать методы if()...else if()...else... для выражения логики, [обязательно], чтобы избежать трудностей с последующим обслуживанием кода, поторопитесь с более чем 3 слоями. Если код логического суждения if-else превышает 3 уровня, его можно реализовать с помощью оператора защиты, режима стратегии, режима состояния и т. д.
На самом деле, по моему мнению, использование защитных операторов, шаблонов стратегий и шаблонов состояний предназначено для уменьшения цикломатической сложности и упрощения кода, чтобы как авторы кода, так и сопровождающие могли легко понять основной смысл.
Хотя в руководстве по разработке Ali JAVA упоминается способ выражения логики if()...else if()...else..., в более широком смысле то же самое верно для нескольких вложенных циклов, и необходимо учитывать оптимизацию.
Анализ мыслей
Как показано выше, на самом деле это выглядит такдревовидная структура,условно говоря,на самом деле сложнее.Идея оптимизации состоит собственно в том,чтобы изменить древовидную структуру на последовательную структуру,чтобы порядок был понятен.Общая идея такая.Посмотрим как использовать гвардию заявление, режим стратегии и режим состояния для достижения.
заявление охраны
Заявление опекуна?Защитный оператор предназначен для разделения сложного условного выражения на несколько условных выражений, таких как очень сложное выражение, которое вкладывает несколько слоев операторов if-then-else, преобразует их в несколько операторов if и реализует свою логику, эти несколько операторов if являются защитными заявлениями.
Пример охранного оператора выглядит следующим образом:
public void today() {
if (isBusy()) {
System.out.println("change time.");
return;
}
if (isFree()) {
System.out.println("go to travel.");
return;
}
System.out.println("stay at home to learn Alibaba Java Coding Guidelines.");
return;
}
На самом деле это относительно просто, каждый if соответствует пути конечного узла (каждый if в основном возвращает).
режим стратегии
Обзор:Используя эту модель, набор алгоритмов должен быть инкапсулирован в ряд объектов. Гибкость изменения функций программы путем передачи этих объектов.
Шаблон стратегии более известенТри стратегии Чжугэ ЛянаКстати, как показано на рисунке:
Почему Чжугэ Ляну так сложно делать три трюка?Он мог просто сделать трюк и написать на нем все три трюка. Но он этого не сделал, а правильно использовал режим стратегии, чтобы сделать три трюка.Польза от этого очевидна:Чжугэ Лян написал умный план, его мысли очень ясны, и эти три плана нельзя спутать друг с другом.иЧжао Юнь тоже очень удобен, когда видит переворот, а когда видит какой переворот, очень удобно пользоваться., если три хитрых приема смешать вместе, он будет не так удобен.
В JDK используется режим стратегии java.util.Comparator#compare(). Например, мы часто сортируем товары. Существует множество условий. По количеству просмотров товара, цене, времени обновления, [цене, времени], [просмотры страницы] , время обновления] (восходящие и нисходящие операции) По сути, это тоже дерево выше, и что нужно делать, так это каждый раз брать один из листовых узлов. Много раз эти суждения пишутся в публичном методе, а сортировка пишется после большого количества суждений, а как JDK это делает? Вынесите сравнительную оценку изменений,На самом деле, каждый листовой узел в дереве суждений является стратегией.Представьте, что мы обычно делаем? Это все для записи компаратора # сравнить () (может быть много сортировки алгоритмов, которые реализуют интерфейс компаратора). Каждый раз, когда мы его называем, мы можем выбрать один из них.
В отличие от оператора Guard, оператор Guard связывает каждый if с путем конечного узла. Режим стратегии заключается в том, что все листья реализуют интерфейс Comparator, и конкретное начало использования, которое является прямым использованием вызова (поэтому вы не увидите много ifs, таких как оператор Guard)
режим состояния
Обзор: позволяет изменить поведение объекта при изменении его внутреннего состояния, если объект изменил свой класс. Основное решение заключается в том, что поведение объекта зависит от его состояния (атрибутов), а связанное с ним поведение может быть изменено в соответствии с изменением его состояния.
- Инкапсулирует правила преобразования.
- Чтобы перечислить возможные состояния, вам необходимо определить тип состояния перед перечислением состояний.
- Поместите все поведения, связанные с определенным состоянием, в класс и можете легко добавлять новые состояния, нужно только изменить состояние объекта, чтобы изменить поведение объекта.
- Разрешить интеграцию логики перехода состояния с объектом состояния вместо одного гигантского блока условных операторов.
- Объект состояния может совместно использоваться несколькими объектами среды, тем самым уменьшая количество объектов в системе.
Так как режим состояния инкапсулирует правила преобразования, глубина общего дерева должна быть не менее 2 слоев и выше, а ощущение личного понимания - это процесс, например* Вода находится в состоянии льда, когда она ниже 0 градусов --> она становится жидкой, когда она выше 0 градусов --> она становится кипящей, когда она достигает 100 градусов.
Паттерн состояния очень похож на паттерн стратегии, паттерн стратегии управляется извне, а паттерн состояния управляется изнутри. Суть в том, чтобы пойти по пути только одного из листьев на древе суждений.
Режим состояния имеетОчевидные недостатки: режим состояния не очень хорошо поддерживает «принцип открытия и закрытия».Для режима состояния, который может переключать состояния, добавление нового класса состояния требует изменения исходного кода, отвечающего за переход состояния, иначе он не может переключиться на новое состояние, и изменить определенное состояние.Поведение каждого класса состояния также необходимо изменить исходный код соответствующего класса.
программистская шутка
Жена звонит мужу-программисту: я по дороге после работы покупаю десять булочек, а если вижу продавца арбузов, покупаю одну. В ту ночь муж вошел в дом с булочкой в руке... Жена сердито сказала: «Почему ты купил только одну булочку? ! Муж испугался и пробормотал: Потому что я действительно видел продавца арбузов. "
Если вы используете режим стратегии, это просто, 2 части информации, 1: купить десять плюшек. 2: Купи арбуз, забудь, если у тебя его нет.
Это шутка, но последовательность проще, чем суждение.
Суммировать
- Концепция цикломатической сложности
- заявление охраны
- режим стратегии
- режим состояния
Резюме: Суть в том, чтобы сделать глубокое дерево суждений, то есть сделать суждения по последовательной структуре, то есть дать путь каждому листу, не видя сложной древовидной структуры.
считать
Это одна из деталей руководства по разработке Ali JAVA,Почему, каков результат, насколько он неожиданный? ? Ждем ваших комментариев и анализа! ! !
Некоторые из приведенных выше анализов основаны на личном понимании и размышлениях.Если вы обнаружите что-то не так, пожалуйста, оставьте сообщение и укажите на это, спасибо! ! !
Если вы найдете это полезным после прочтения, ставьте лайк и подписывайтесь.
Ознакомьтесь с историческими статьями, добро пожаловать в личный публичный аккаунт! ! !