С чего начать разработку архитектуры? +7



Примечание: Если вы считаете, что на построении архитектуры съели хотя бы полпёсика, то эта статья не для вас.

Модель — абстрактное представление реальности в какой-либо форме.

Предполагаем, что архитектор уже закончил со сбором требований к будущей системе и их анализом.

Разработку архитектуры нужно начинать только с понятия и принятия фундаментальной концепции работы с информацией (данными): передача, хранение и обработка. Притом формы ввода/выводы информации, схемы обработки, абстрактные структуры массивов и элементов данных сами по себе тоже являются информацией (как и всё приложение) и подчиняются той же фундаментальной концепции.

image

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

image

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

Основой архитектуры (основной моделью) станет модель бизнес-процесса движения основных данных (то, для чего будет предназначено приложение). Этот этап очень опасен: на архитектора может нахлынуть масса оригинальных идей. Нужно сдержать этот поток идей. Подавить желание помечтать или нарисовать кучу ненужных схем. Сейчас нужно создать только одну схему последовательного получения основных данных, хранения и обработки. Ничего лишнего. Здесь не нужна декомпозиция. Именно такая схема ложится в основу, является основным представлением архитектуры и должна быть всегда на виду. В качестве бизнес-процесса может выступать технологическая карта.

Вторая основная модель будет с добавлением вторичных бизнес-процессов и данных. Например добавляются модели пользователей, управления доступом (ACL), модели логирования, модели мониторинга, событийную модель и т.п. На основе второй модели уже возможна разработка первой схемы БД и/или хранилища данных, и прототипа приложения. На этом этапе может прийти понимание о том, стоит ли делать монолитное приложение, компонентное, применить микросервисный подход или какой-либо другой. При этом интересен факт: между монолитом и каждым микросервисом (в микросервисной архитектуре) нет различий с точки зрения фундаментальной концепции. С этого момента необходимо начать разработку документа обоснования архитектуры. Документ обоснования архитектуры является регистратором рассуждений о причинах принятых решений архитектуры и разъяснений.

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

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

Вы можете помочь и перевести немного средств на развитие сайта



Комментарии (8):

  1. saipr
    /#20054894 / +1

    Притом формы ввода/выводы информации, схемы обработки, абстрактные структуры массивов и элементов данных сами по себе тоже являются информацией (как и всё приложение) и подчиняются той же фундаментальной

    Как мне все это (особенно первая блок-схема) напомнила мои годы учебы в ВА им. Ф.Э. Дзержинского в далеких 1971-76 г.г. Мы были первым набором на кафедру программирования. Но тогда только все начиналось.


    А сейчас… Но какие выводы


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

    Под стать выводам докторской диссертиции.

  2. TechnoMag
    /#20055130

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

  3. be_a_dancer
    /#20055156 / +2

    На мой взгляд, статья в чистом виде вода. Из чего это можно понять: пол текста — клишированные обороты, вроде

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

    Много красивого текста, но по факту никакой полезной информации.

    В случае, если автору хотелось рассказать про архитектуру, следовало бы просто прочитать литературу на это счет. Из признанного и успешно работающего: Мартин (Чистая архитектура и чистый код), Вигерс (разработка требований к программному обеспечению), Басс (архитектура программного обеспечения на практике), O'Reilly.

    Кроме того, можно было бы взять другие источники по разработке: прочитать про DDD и другие подходы к проектированию. Помимо этого, нужно знать о том, как проектируется MVP и чем прототип отличается от MVP.

  4. xztau
    /#20055176

    архитектура системы
    Я смотрю, в yed нарисовано?
    Кто в чём UML чертит? Структуру на этапе проектирования, диаграммы классов…

  5. ggo
    /#20058324

    Зачем разрабатывается архитектура?
    Кому и в чем от этого польза?

    • RemiZOffAlex
      /#20058774 / -1

      О структуре убедительных программ

      Техника управления сложностью известна с древних времен: Divide et impera (разделяй и властвуй). Аналогия между построением доказательства и построением программы, пожалуй, просто поразительна. В обоих случаях даны отправные точки (аксиомы и существующая теория против примитивов и доступных библиотечных программ), в обоих случаях задана цель (доказанная теорема против желаемых результатов), в обоих случаях сложность преодолевается делением на части (леммы против подпрограмм и процедур).
      Я полагаю, что гениальность программиста соответствует сложности решаемой задачи, а также полагаю, что он сумел добиться подходящего разделения задачи. Затем он продолжает действовать следующим образом:
      * Он разрабатывает полные спецификации отдельных частей.
      * Он убеждается, что проблема в целом решается при наличии в его распоряжении частей программы, удовлетворяющих этим спецификациям.
      * Он разрабатывает отдельные части в соответствии со спецификациями, но при этом делает их максимально независимыми друг от друга и от окружения, в котором они будут использоваться.
      Очевидно, что построение каждой такой отдельной части может снова оказаться сложной задачей, так что для данной части задачи потребуется дальнейшее разбиение.
      Некоторые могут счесть описанный метод разбиения на части недостаточно прямолинейным и слишком извилистым путем достижения конечной цели. Мое собственное мнение я лучше всего могу выразить так: я твердо уверен, что царских дорог в математике нет, или, другими словами, что у меня очень маленькая голова, и я вынужден обходиться ей. Поэтому я рассматриваю технику разбиения на части как базовый прием человеческого мышления и считаю, что стоит попробовать создать условия, в которых она может быть наиболее плодотворно применена.
      Предположение о том, что программист сделал подходящее разбиение, находит подтверждение в том, что становится возможным выполнить первые два этапа: спецификацию частей и проверку, что они совместно решают задачу. Здесь элегантность, точность, ясность и тщательное понимание задачи являются необходимыми предпосылками. Но в целом техника разбиения основывается на том, что обсуждалось значительно меньше, а именно на том, я назвал бы принципом невмешательства. На втором этапе подразумевается, что правильная работа целого может быть установлена путем рассмотрения только внешних спецификаций частей, без деталей их внутреннего строения. На третьем этапе принцип невмешательства всплывает снова; здесь подразумевается, что отдельные части могут быть поняты и построены независимо друг от друга.
      Возможно, здесь уместно заметить, что если я правильно понял нынешнее отношение к проблеме определения языка, при несколько более формальном подходе состоятельность техники разбиения подвергается сомнению. Те, кто выдвигает возражения, аргументируют свою точку зрения следующим образом. Когда вы используете механизм, подобный описанному двухэтапному, во-первых, должны быть созданы спецификации, а во-вторых, описано, как все это работает. При этом вы вынуждены в лучшем случае сказать дважды одно и то же, но вероятнее всего, вы придете к противоречию. С точки зрения статистики, как ни грустно мне об этом говорить, последнее замечание достаточно серьезно. Единственный ясный путь к определению языка, возражают они, это просто определение механизмов, потому что все, что они будут делать, следует из этого. Мой вопрос: А как оно следует? мудро оставляют без ответа, и я боюсь, что это тонкое, но порой значительное различие между понятиями определено и известно сделают их работу интеллектуальным упражнением, которое ведет в тупик.
      /Эдсгер Вайб Дейкстра. Программирование как вид человеческой деятельности. В переводе. Отрывок/