Практический опыт | Как улучшить качество кода?

облачный носитель Serverless
Практический опыт | Как улучшить качество кода?

Введение. Три эффективных способа улучшить качество кода: моделирование предметной области, принципы проектирования и шаблоны проектирования.

Основная причина плохого кода

Воплощение плохого кода

Мы можем привести производительность явления так много плохого кода, так как я не знаю имя итальянских, крупных классов, большого метода, дубликата кода, код трудно понять, сложно изменить код .. .... которые большинство влияют на производительность двух качественного кода, названо в честь неправильной логики плохой масштабируемости, когда новый человек, читающий код, иногда нашел имя методов, а не на фактической логике, которые люди чувствуют себя очень запутанными, это явление Не редкость в обычной работе; другое - это логическое расширение бедных, а после предложенных новых требований к обслуживанию, которые можно найти во многих изменениях, необходимо вернуться к большему количеству бизнес-логики, что приведет к эффективности НИОКР.

наведение проблемы

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

  • Проблемы с именами: Проблемы с именами могут быть настоящей головной болью, и нелегко придумать настоящее и понятное имя. Когда дело доходит до именования переменных, именования методов и именования классов, возникают две распространенные проблемы с именованием: одна неразборчива, а другая неправильна. Именование непонятно на первый взгляд и не знает, что оно означает.Основная причина в том, что он не придумал подходящей лексики для абстрагирования проблемы; именование не достойно имени, потому что значение имени и фактическая логика отличаются, такое наименование будет вводить людей в заблуждение.
  • Проблема структуры кода: когда человек смотрит на инженерный код в первый раз, когда он не изучал логику кода в глубине, он может почувствовать качество кода по модулям, классам и методам в целом. Если в классе тысячи строк кода, то в методе сотни строк, я считаю, что мало кто готов смотреть на такую ​​логику, да и сложность относительно высока. Хорошие иерархии кода настолько ясны, что это так же приятно для глаз, как чтение красивой книги.
  • Проблема парадигмы программирования: существует три парадигмы программирования: режим таблицы, режим сценария транзакции и режим проектирования предметной области.Наиболее часто используется режим сценария транзакции, который больше всего соответствует тому, как люди делают что-то, шаг за шагом, самая большая проблема с этим режимом заключается в том, чтобы взять на себя ответственность, которую не следует брать на себя, что кажется более логичным, но на самом деле есть много проблем, обычно люди любят называть это «кодом спагетти».
  • Проблемы с читабельностью: Помимо реализации бизнес-функций, код также должен иметь хорошую читабельность. Некоторые коды не имеют комментариев, некоторые форматы кода неоднородны, дело не в том, что лямбда-выражения плохи, ключ в том, чтобы контролировать глубину иерархия), такой код выглядит лаконично и не очень читабельно.
  • Масштабируемость. Проблема масштабируемости - это проблема с более старым раскрытием, не так легко добиться хорошей масштабируемости, в целом нет абстрактной проблемы, такой как магазин смотрит на вкладку, код типа лапши напрямую определяется списком., Затем добавьте Вкладка объекты внутреннему, как я могу сделать, если мне нужно добавить вкладку? Типично не соответствует принципу открытия и закрытия.
  • Никаких проблем с дизайном: весь код выглядит пресно, и другие не могут извлечь из него уроки после прочтения. Как правило, проблема такого рода заключается в том, что не проводится углубленный анализ проблемы, а решается только проблема, без рассмотрения того, как лучше решить проблему, например, можно ли абстрагировать работу повторяющегося процесса обработки в общий класс шаблона, а также можно ли обрабатывать различные классы обработки через класс фабрики. Получить конкретные стратегии, можно ли обрабатывать асинхронную обработку с использованием режима событий и можно ли обнаружить новые возможности с помощью автоматической регистрации...

анализ причин

Далее проанализируйте причины, по которым возникает разница в коде.Эта проблема имеет внешние причины и внутренние причины.

  • Основными внешними причинами являются: срочный график проекта, не так много времени на проектирование; нехватка ресурсов, нехватка рабочей силы, может прийти только как можно скорее; срочные проблемы устраняются, а временные решения быстро устраняются....
  • Основные внутренние причины: их собственные навыки низкие, как они могут их не освоить, такие как лямда-выражения, часто используемые инструменты, использование расширенного фреймворка и т. д.; без духа стремления к конечному результату, просто выполнить требования, стабильность, масштабируемость , производительность, согласованность данных и т. д. не учитываются...

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

Способы улучшить качество кода

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

  • Фаза анализа: когда вы получаете требование, не беспокойтесь о том, как сначала реализовать эту функцию, легко попасть в режим сценария транзакции. Анализировать что? Необходимо проанализировать цель требования и какие объекты необходимы для выполнения функции.Основой этого шага является поиск объекта. Возьмем пример, показанный выше на вкладке записи в магазине. Он состоит из двух ключевых объектов: панели навигации и вкладки. Панель навигации содержит несколько вкладок.
  • Этап проектирования: после анализа существующих сущностей проанализируйте, как распределить обязанности между конкретными сущностями. Для этого необходимо руководствоваться некоторыми принципами проектирования. Некоторые принципы распределения ответственности упоминаются в GRASP. Заинтересованные учащиеся могут подробно ознакомиться с ними. . Возвращаясь к приведенному выше примеру, у Tab есть две основные обязанности: во-первых, можно ли отображать вкладку, что является его собственной обязанностью.Логика отображения новой вкладки заключается в том, что в магазине появятся новые товары в течение 30 дней; Спецификация вкладки Построение информации также является его собственной обязанностью. Панель навигации выполняет две функции: одна — принимать регистрацию вкладок, другая — отображать. Распределение обязанностей не является разумным и не соответствует характеристикам высокой сплоченности и низкой связанности.
  • Стадия полировки: на этом этапе выберите подходящий режим для реализации. Когда вы увидите режим, вы поймете, что он делает. Например, если вы увидите класс шаблона, вы будете знать, как работать с общим бизнес-процессом. конкретные изменения обрабатываются в подклассах. В приведенном выше примере используются два режима проектирования: один — режим подписчика, процесс автоматической регистрации вкладки, а другой — режим шаблона, в котором сначала оценивается возможность отображения вкладки, а затем создается информация о спецификации вкладки. просто, это может быть Общий процесс абстрагируется, и подкласс просто переопределяет 2 метода.

Роль модели предметной области

Барьеры моделирования домена для входа относительно высоки, оно содержит некоторые концепции, которые трудно понять. Эта статья не описывает, как моделировать (на частных биржах) я обнаружил, что так, чтобы мы знали, как принять моделирование моделирования домена важнее, чем если вы знаете роль моделирования домена, они будут думать о каждом видах способов учиться. Следующее, проиллюстрированное опытом автора ряда фактических случаев, так что мы чувствуем себя не звучат так полым.

упростить понимание

Автор присоединился к финансовой компании после года работы. В то время я ничего не знал о финансах. После того, как я столкнулся с такими терминами, как предмет, права кредитора, передача прав кредитора, финансовая гарантия и не- гарантия финансирования, я какое-то время чувствовал себя в растерянности, и мне приходилось каждый день узнавать много нового.

Через два месяца мой супервайзер дал нам шаринг, просто взял ppt, он содержит сущности домена, и отношения между сущностями, я сразу понимаю, насколько все дело в игре. Роль модели заключается в том, чтобы упростить людям понимание вещей. Если мы увязнем в деталях кода в начале, нам будет трудно увидеть полную картину бизнеса, а код должен реализовать бизнес-возможности. вы знаете дело, вы увидите код снова гораздо быстрее.

единое понимание

В компании есть НИОКР, продукт, эксплуатация, тестирование... Когда мы общаемся вместе, язык по умолчанию у всех разный. Разработчики часто говорят о том, как работать с этой таблицей базы данных, а продукты часто говорят о бизнес-моделях... В результате понимание у всех неодинаково.

То есть однажды ночью, как раз и интерактивные одноклассники подтвердили процесс взаимодействия, вдруг она задала вопрос: положить похожие страницы продавцу в ту же папку, это хорошая реализация? После прослушивания, я не могу сказать, интерактивные одноклассники я слышал, что это разумно, как я могу этого добиться? Я начал рассказывать ей существующий системный процесс, я обнаружил, что она услышала лицо, я сразу понял, что использовал язык разработки в описании, сразу изменил способ, найти ручку и одну бумагу, интерактивные одноклассники, что это наша предметная модель, как происходит взаимодействие между субъектами бизнеса?После выступления интерактивные одноклассники сразу понимают, почему причина, почему это невозможно.

Дизайн руководства

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

На рисунке ниже вы можете ясно видеть, что панель навигации содержит несколько вкладок, а одна вкладка содержит информацию о спецификации и информацию об операции щелчка. После рисования этой бизнес-модели соответствующий код также будет иметь вышеуказанные концепции, между реальностью и кодом существует взаимосвязь отображения, модель — это код, а код — это модель. Если ваша модель не может отражать реальность, то модуль можно рассматривать только как притворство.Г-н Фан Ган резюмировал это в трех предложениях: каковы вещи в действительности, каковы соответствующие объекты, каково поведение реальных вещей , и какие методы существуют для соответствующих объектов; Какая связь, какая связь между соответствующими объектами.

Основная логика принципов дизайна

SOLID

Что касается принципов проектирования, мы обычно говорим о SOLID, который содержит пять принципов проектирования:

  • Принцип единой ответственности: у класса должна быть одна и только одна причина для изменения, класс может быть изменен только по одной причине.
  • Принцип открытости-закрытости: сущности должны быть открыты для расширения, но закрыты для модификации.
  • Принцип подстановки Лискова: функции, использующие указатели ссылок на базовые классы, должны иметь возможность использовать объекты производных классов, не зная об этом, а подклассы могут заменять родительские классы.
  • Принцип изоляции интерфейса: клиент не должен быть принужден к реализации интерфейса, который он не использует, и клиент не должен быть принужден к реализации интерфейса, который он не использует, и интерфейс должен быть разделен как можно меньше.
  • Принцип инверсии зависимостей: абстракции не должны зависеть от деталей, детали должны зависеть от абстракций, абстракция не зависит от деталей, а детали зависят от абстракций.

Зачем нужны принципы дизайна

Мы в основном слышали о принципе Solid, но зачем вам эти принципы проектирования? Для того, чтобы ответить на этот вопрос, будем исходить из цели. Цель разработки программного обеспечения высокая, низкая связь, это предложение висит во рту, трудно измерить, например, ответить: Какая высокая интеграция? Что за низкое сцепление? Какова протяженность высокого пересечения? Какая степень низкая или низкая? На эти четыре проблемы не очень хорошо отвечать.

Подумайте об этом наоборот, что, если наш код не был очень сплочен и низкосоединение? То есть низкая сплоченность и сценарии сценариев высокой связи. Если код низкой сплоченности и высокой связи, будет модифицирована логика, которая приведет к модифицированию нескольких кодов. Это не то, что мы хотим видеть, особенно при изменении оригинальной логики, это легко вызвать Ошибки, такие как автор, прежде чем модифицировать одну проблему, и изменение другого правила, кажется, не проблема, но результат влияет на деловую партию. Вот почему принцип открытого закрытия предлагает закрыть модификацию. Изменение оригинальной логики является рискованным.

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

Как применить на практике

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

Суть шаблонов проектирования

практика практики

Когда вызываемый интерфейс имеет разные реализации (входные параметры, выходные параметры и интерфейсы разные), антикоррозийный слой нужно абстрагировать, как это реализовать? Далее, давайте рассмотрим два случая соответственно. Фокус этих двух случаев различен: один — это абстракция, ориентированная на поведение, а другой — абстракция, ориентированная на структуру.

Запрос торговой марки магазина

Магазин должен запросить информацию о торговой марке магазина, но интерфейсы Lazada и AE разные, как абстрагироваться от антикоррозийного слоя?

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

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

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

Запрос купона магазина

Существует режим разработки «один размер подходит всем»: сборка параметров, вызов интерфейсов и анализ результатов ответов. Вы обнаружите, что этот режим слишком универсален и подходит для всех сценариев. Этот режим разработки также называется «сценарий транзакции». режим" или код "типа лапши".

В случае купонного запроса, используя шаблон моделирования предметной области, сначала рассмотрите, какие сущности существуют. Суть запроса купона: вернуть набор купонов, соответствующих условиям, через запрос условия xx. Есть два типа информации, которые имеют решающее значение для купонов. Одним из них является спецификация купона, такая как название купона, сумма скидки, срок действия и т. д., а другим — ограничение купона. Когда вы спрашиваете, следует ли проверять купоны магазина, или проверять купоны фанатов, или проверять купоны продуктов... . Итак, разделите абстрактный купон на две части: одна — это запрос запроса купона, а другая — объект спецификации купона.

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

Оригинальная ссылка

Эта статья является оригинальным контентом Alibaba Cloud и не может быть воспроизведена без разрешения.