Даже если вы отвертка, вы все равно каждый день бродите по «архитектуре» этой системы, возясь в ней. Вам приходится рассматривать ценность и значимость вашей повседневной занятости с общей точки зрения «архитектуры». У вас было много проектов. Когда вы присоединяетесь к новой команде или к некоторым старым проектам, после понимания истории бизнеса, у вас, возможно, уже мелькнула «архитектура» в вашем уме. Тогда, когда вы посмотрите на код, вы будете вне себя от радости: « Конечно же, " Код, лежащий в основе этой «архитектуры», заставляет вас чувствовать себя обновленным при его чтении; в некоторых проектах, когда вы читаете код, вы обнаруживаете, что он отличается от «архитектуры», которая мелькнула у вас в голове. В это время вы можете только закрыться. блокнот с ругательствами, я задумался о том, как можно было «соорудить» такой бардак. Выпив чашку кофе, я продолжил жевать «кучку дерьма» внутри.
Следите за разработчиками Tencent Cloud и заранее получайте техническую информацию из первых рук👇
Слово «архитектура» уже упоминалось во многих местах. Архитектура, архитектура. Что такое архитектура? В реальной работе часто бывает трудно обсуждать один и тот же чертеж архитектуры, поскольку разные люди по-разному понимают связанные понятия, такие как «архитектура», «система» и «модуль».
Прежде всего, давайте разберемся, что такое «архитектура». В Интернете есть множество статей, объясняющих это. Среди них первые две главы «Изучения архитектуры с нуля» Ли Юньхуа дают более четкое представление. Слово «архитектура» может использоваться как существительное или глагол. Как существительное оно описывает структурно-организационные отношения программного обеспечения, а глагол — к процессу проектирования и развития структуры программного обеспечения; Давайте сначала посмотрим на компоненты архитектуры как на название:
система:когда“Архитектура”при создании существительных, Вы можете просто заранее спроектировать систему, Я могу сказать одно App системная архитектура.
Модуль:система Не могу описать Архитектуравнутренние детали, Необходимо разделить на различные модули, Например xxApp Архитектура:
Компоненты:можно считатьсистеманаименьшая единица,Например, модуль сообщений, Если мы продолжим его совершенствовать, Его можно разделить на такие компоненты, как отправитель сообщения и получатель сообщения.
Связанный:компоненты、Модули часто не существуют независимо друг от друга.,Обычно есть какие-то отношения, Например, модуль сообщенийи пользовательские модули,Есть зависимости.
ребеноксистема:когдаодин Архитектура Когда масштаб и сложность относительно велики,Оптические модули и компоненты могут быть нечетко описаны., Некоторые связанные модули можно дополнительно сгруппировать в подкатегории. Например, возможное изображение WeChat Архитектура:
Вышеупомянутое выравнивает концепции компонентов архитектуры с существительным уровнем архитектуры. Когда слово «архитектура» используется как глагол, мы обсуждаем некоторые методологии архитектуры.
В вертикальной архитектуре упор делается на многоуровневость, и в основе этой идеи лежит идея многоуровневого проектирования. Это устойчивая идея проектирования в архитектуре операционных систем.
Преимущества такой иерархической изоляции очевидны. Если вы когда-либо занимались разработкой эмулятора Android, вы знаете, насколько важен здесь уровень HAL. С его помощью вы можете легко заменить реализацию ядра Linux с помощью моделирования. легко запускается в системе Windows.
Многоуровневая архитектура — это метод проектирования, который делит системные программы на разные уровни в соответствии с функциями и обязанностями. Каждый уровень имеет свои конкретные обязанности и взаимодействует с другими уровнями через понятные интерфейсы. Этот архитектурный подход помогает улучшить организацию, удобство сопровождения и тестирования кода, а также может легко заменить и расширить основные возможности одного уровня. Что касается разработки многоуровневой архитектуры для приложений, я написал статью «Обзор архитектуры приложений Android https://www.jianshu.com/p/e157cc64ea5c» в 2016 году. Оглядываясь назад, можно сказать, что основная идея многоуровневой архитектуры по-прежнему остается нет там Изменить.
Самая базовая многоуровневая архитектура обычно содержит следующие три уровня:
определенный масштаб Приложение обычно остается многоуровневым, и, например, его можно расширить за пределы базового уровня.
Он выражает идею и метод наслоения. Конкретное количество слоев зависит от размера и сложности приложения.
Стандарты проверки:Было ли наслоение успешно достигнуто, Стандарт теста заключается в том, действительно ли он дан App Это дает преимущества многоуровневого подхода, упомянутые выше. Например: можно ли заменить основные возможности на одном уровне по низкой цене? При изменении определенного слоя Можно ли провести модульное тестирование этого слоя независимо?
Поскольку функциональный масштаб Приложения и масштаб команды продолжают расширяться, может возникнуть необходимость уделить внимание проектированию архитектуры с точки зрения бизнес-модулей. Цель состоит в том, чтобы уменьшить взрывной рост сложности, вызванный увеличением количества приложений. Функциональный масштаб. Горизонтальная архитектура подчеркивает горизонтальное решение между бизнес-модулями для снижения сложности.
5.1 Оценка сложности
Все четыре модуля на рисунке имеют зависимости, поэтому сложность рассчитывается как 24: сложность = 4x3x2x1.
Если мы каким-то образом отделим это (добавив API сервисного уровня):
При такой развязке сложность становится 5: четыре модуля плюс слой изоляции.
Из приведенного выше анализа мы видим, что модульное разделение — это тема, которую невозможно избежать после того, как приложение достигнет определенного масштаба. Гигантские приложения, такие как Taobao и WeChat, уже прошли несколько этапов модульной реконструкции в итеративном процессе. : «Практика реконструкции модульной архитектуры WeChat Android».
https://cloud.tencent.com/developer/article/1005631》
Стандарты проверки:Горизонтальный Архитектура Это успешно?, Стандарт тестирования заключается в том, может ли этот модуль быть независимо разработан, скомпилирован и отлажен, если он разработан независимой командой.
5.2 Архитектура не является универсальным решением
Я имел опыт создания малых и средних приложений стоимостью в сотни тысяч или миллионы долларов, а также участвовал в разработке архитектуры крупномасштабных приложений с десятками миллионов ежедневных пользователей. Последние имеют более сложную архитектуру. и использует более богатые технологии и методы. Можно ли построить последнее или применить? Ответ, очевидно, отрицательный. Нельзя сказать, что архитектура WeChat великолепна, поэтому давайте просто перенесем ее и будем использовать. Архитектурный проект должен соответствовать трем принципам:
Для получения подробной информации, пожалуйста, обратитесь к:
«Три принципа архитектурного проектирования https://time.geekbang.org/column/article/7071»
5.3 Сначала архитектура, затем шаблоны проектирования
Когда я впервые пришел в эту индустрию, многие шаблоны проектирования сбивали с толку. Думаю, мы изменили порядок, из-за чего нам было трудно понять, почему этот шаблон использовался и какова роль принципов проектирования SOLID.
Сначала должны быть бизнес-сценарии, а затем какая архитектура должна быть разработана. Чтобы удовлетворить требованиям этой архитектуры, затем должен быть гибкий выбор и применение различных шаблонов проектирования и принципов проектирования.
Например,Чтобы отделить пользовательский модуль и модуль сообщений,Предположим, что пользовательский модуль полагается на информацию модуля сообщений о количестве непрочитанных сообщений.
Чтобы удовлетворить требования горизонтальной архитектуры и удалить зависимости модулей, архитектура становится:
Делая такую настройку, мы неосознанно использовали SOLID В принципе инверсии зависимостей есть несколько принципов.
5.4 Кроссплатформенность и динамичность
Кроссплатформенность и динамика — это темы, которых нельзя избежать при построении архитектуры приложения.
Два типа кроссплатформенности:Первый:UI Кроссплатформенное представительное решение WebView、Weex、RN、Flutter и т. д. web план.
Второе: С++ кроссплатформенность, Обычно в определенных конкретных сценариях, где требуется производительность, Например, обработка кодирования и декодирования аудио и видео, некоторые сложные алгоритмы шифрования и дешифрования и т. д. Есть также команды, которые имеют преимущество в виде технологического стека лидерской команды. Выберете перенос бизнеса или даже UI Также используется C++ кроссплатформенность,– Конференция Tencent.
Динамический:представлятьплан WebView,Weex , мини-программа и т. д. web Решения и нативные плагины план.
О том, как выбрать,Когда хотим идеальной динамики или Кросс-платформенный,Возможно, какая-то производительность принесена в жертву,Например WebView , который идеален с точки зрения кроссплатформенности и динамичности, но имеет худшую производительность среди альтернатив. Другой пример: если мы воспользуемся. C++ , с точки зрения производительности проблем определенно нет, но он столкнется с огромными проблемами с точки зрения эффективности разработки и технических требований к персоналу команды.
Некоторые варианты определяются самим бизнесом,– Приложения из магазина приложений, такие как Yongyongbao,О проблеме Кросс-платформенного вообще не стоит думать., Потому что он может работать только Android платформа, Однако у него очень высокие требования к динамике. Будучи конкурентом производителей, он не может быть указан в магазине приложений производителя, поэтому очень важны динамические решения, такие как плагин.
Выбор динамических и кроссплатформенных решений в архитектуре также является вопросом компромиссов. Большая часть работы, выполняемой архитектурой, заключается в поиске компромиссов и балансов.
Только теория в сочетании с практикой может быть полностью понята. Сообщество разработчиков Tencent Cloud ранее сотрудничало с командой Mobile QQ, чтобы спланировать серию статей о технических изменениях Mobile QQ. Нажмите на заголовок статьи ниже, чтобы прочитать ее и понять. суть проектирования решений на основе превосходных архитектурных практик.
«Не боюсь свернуть горы, история обновления и изменения технической архитектуры Mobile QQ»
-End-
Автор оригинала|Лю Гуанли
Спасибо, что прочитали это, почему бы не обратить внимание?