Архитектурный слой (в корпоративной разработке). Понятие, определение, представление

    Сейчас сложно найти короткое и понятное определение таких понятий как «слой приложения» и «уровень абстракции». Это влечёт различия в понимании одного и того же либо непонимания данного понятия среди разработчиков. А недопонимания ведут к разногласиям.

    Цель этой статьи: совместно выработать определённость, создать у всех единое представление и выработать короткое, ясное и практичное определение для понятия Архитектурный слой в области корпоративных приложений. Всё что приводится в статье вы можете обсудить и дополнить в комментариях, а я актуализирую материал в статье в соответствии с замечаниями.

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

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


    В чём сейчас заключается путаница при работе с многослойной архитектурой:
    • принято считать, что слоёв должно быть 3: данные, бизнес-логика, интерфейса — но на самом деле слоёв может быть любое необходимое количество
    • нет критериев, по которым те или иные задачи относятся к тому или иному слою, что часто приводит, к созданию одного большого прикладного слоя, либо один какой либо из слоёв дорабатывается под задачи, не характерные для него
    • нет конкретного короткого определения
    • есть пересечения между понятиями слоя (layer), уровня и яруса (tier), к которым так же нет точных определений. По Фаулеру уровни относятся, подразумевая физическое разделение, а на практике такой определённости нет

    Вместо понятий «слой приложения» и «уровень абстракции» пусть используется понятие «Архитектурный слой».


    Архитектурный слой (корпоративного приложения) — это определённый (огранниченный назначением, замкнутый) набор ресурсов (инструментов работы с ресурсами, деталей, составляющих), с помощью которых реализуются множество (огранниченное критериями) прикладных задач, характерных для данного слоя. Вышестоящий слой реализует свои составляющие (ресурсы), на основе ресурсов нижестоящего слоя. Ресурсы определённого слоя совместимы друг с другом и используются только внутри этого слоя (в идеале). Вышестоящий слой может созадавать свои ресурсы используя ресурсы нескольких слоёв. Может иметь отношение к абстрактной, идеализированной системе, сущетвующих в виде схем либо в большей мере относится к реализации — это определяет составляющие слоя.

    Составляющие слоя:

    • если слой относится к реализации: классы, объекты, контекст, сервисы, контроллеры, прокси, сборки ...
    • если слой относится к абстракции: модели данных (идеализированные), действия...

    Чем характеризуется архитектурный слой:

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

    Коротко о порядке проектирования архитектурных слоёв:

    1. Выделяется все бизнес требования, которые структурируются по категориям.
    2. Требования разбиваются на задачи, которые должны решаться приложением.
    3. Задачи категоризируются и объединяются в группы на основе схожести своего предметного назначения.
    4. На основе этих категорий выделяется общее назначение архитектурного слоя, в котором будут решатся задачи.
    5. Решения задач можно представить как алгоритм, или процесс, который обеспечивает желаемый результат. Из всех задач выделяются общие составляющие (детали), из которых они реализуются. (модели и действия над ними). О том как это делается, будет дополнительная статья.
    6. На основе выделенных составляющих реализуются классы соответствующего слоя и как правило объединяются в одну отдельную сборку.


    Примеры
    Пример 1.

    Модель ISO/OSI

    Пример 2.

    Стоит задача автоматизировать электронный документооборот, которая подразумевает

    • выполнение элементарных действий с различными видами документов: подписание, согласование, отправка и другое
    • автоматическая фоновая работа в несколько потоков
    • управление работой потоков оперативно через пользовательский интерфейс
    • обмен данными с другими системами (приём, отправка, конвертирование документов)

    image

    Пример 3.

    Строительство офиса

    1 уровень — задачи по строительству здания, фундамент, возведение стен, кирпичи, цемент
    2 уровень — отделка мебелирования, детали — обои, мебель…
    3 уровень — логическое распределение помещений, людей, деление на отделы — детали: отделы, рабочие места, помещения

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

    Один слой предоставляет только набор тех ресурсов, которые ему логически характерны. 3й слой (места, кабинеты, отделы), работает только в рамках этих сущностей и действий. Если мест не хватает, то кабинет не достраивается, но его можно достроить, доработав ниже стоящий слой.

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 24

      +1

      Если вы используете метафору "архитектура", то почему у метафоры "архитектура" есть "слои"? Я ни разу не видел слоистых зданий.


      … Поправка, оказывается, такое есть: https://www.pinterest.com/fabricimages/layered-architectural-design/


      Но я не уверен, что вы это имели ввиду.

        0
        Применительно к слоям эта метафора уже давно применяется, я решил остановиться именно на ней (есть ещё метафора уровни, слои абстракции), так как она часто используется в Мартине Фаулере — Шаблоны корпоративных приложений.
          0
          до архитектурного слоя останавливался на понятии Прикладной слой, но Архитектурный слой понятие уже закрепилось более остальных (уровни абстракции, слои абстракции, слои приложения...)
            +1

            Ну вот у вас есть, допустим, невероятно сложная программа с очень хорошей архитектурой. Называется /boot/vmlinuz-5.4.0-38-generic. И где там слои?


            … Допустим, не ядра. Вот другое, невероятно большое и объёмное приложение. https://github.com/ceph/ И где тут слои?


            Вы берёте какой-то малюсенький мирок какого-то одного фреймворка и пытаетесь его терминологию распространить на всю вселенную. Не надо.

              0
              Спасибо за замечание. Я думал об этом но не упомянул. В gamedev и микроконтроллеры не лезу. Только корпоративные приложения.
              Доработал статью, заголовок уточнил
                0
                сейчас подумал, вообще архитектурный слой нет проблем использовать в любом проекте, где используется ООП язык, так как анемичная модель — это частный случай применения ООП. Любой функциональный метод можно обернуть в ООП обёртку из которой можно сформировать анемичную модель.
            +3
              0
              Интересно. А в примере №2 FilesAPI и ConverterPlugin кем используются?

              1) AutomatizationWorker
              2) DocumentsLogic
              3) AutomatizationWorker и DocumentsLogic
              4) Как-то иначе?
                0
                FilesAPI и ConverterPlugin используется одним из классов DocumentsLogic. На этом слое есть класс-менеджер FS, который представляет собой обёртку над файловой системой. Все действия с файловойсистемой внутри этого слоя выполняются черезе класс FS. В реализации класса FS есть непосредственные вызовы FilesAPI и ConverterPlugin.
                ConverterPlugin — это отдельная сборка dll, которая через рефлексию подключается к основному проекту и расширяет возможности FS.
                +1
                совместно выработать определённость, создать у всех единое представление и выработать короткое, ясное и практичное определение для понятия Архитектурный слой в мире корпоративных приложений.

                А вы читали книгу «Руководство Microsoft по проектированию архитектуры приложений»?
                Там вполне хорошо описаны архитектурные подходы, паттерны, слои и довольно много практик
                Можно свободно скачать с сайта Microsoft
                Она довольно старенькая, но содержит очень хорошие знания внути.
                Там можно найти информацию еще «до создания слоёв» и как вообще создается архитектура.

                нет критериев, по которым те или иные задачи относятся к тому или иному слою,

                задачи могут затрагивать слои как по горизонтали, так и по вертикали (см. микросервисы)

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

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

                принято считать, что слоёв должно быть 3: данные, бизнес-логика, интерфейса — но на самом деле слоёв может быть любое необходимое количество

                Это допущение ради упрощения.
                есть понятие «классическая 3х слойная архитектура», это понятие дает некую связь в общении разрабов с неразрабами
                Но так же есть и 4х и 5ти слойные архитектуры и вертикальные, опять же зависит от того, на что делается упор в проектировании и разработке
                Ну и для многих является откровением что абстракции делятся на друге абстракции и чуть ли не каждый слой из 3х слойной архитектуре может быть разбит так же на 3х слойную архитектуру, только с большей конкретикой
                (см. we need to go deeper meme)

                Ну и в создание «общей архитектуры» без знания целей и без учета закона Конвея как то не верится.
                  0
                  Спасибо за ссылку, почитаю.
                  А вы можете сейчас сказать на сколько отличается определение архитектурного слоя в этой книге и в статье?
                  Чем-то можно определение дополнить?
                  Суть в том, чтобы выработать короткое и понятное определение, чтобы всем ими пользоваться.
                    0
                    Для меня все эти определения это просто «вода», они каждые 3 года меняются. Если брать моё мнение, то «слой» это что то что можно «пощупать» или «ощутить», там же это описано в виде некой абстракции — стиля. (ну и качество перевода всегда влияет на термин)

                    Архитектурный стиль, иногда называемый архитектурным шаблоном – это набор принципов,
                    высокоуровневая схема, обеспечивающая абстрактную инфраструктуру для семейства систем.
                    Архитектурный стиль улучшает секционирование и способствует повторному использованию
                    дизайна благодаря обеспечению решений часто встречающихся проблем. Архитектурные
                    стили и шаблоны можно рассматривать как набор принципов, формирующих приложение.
                    Гарлан (Garlan) и Шоу (Shaw) определяют архитектурный стиль как:
                    «… семейство систем с точки зрения схемы организации структуры. Точнее говоря,
                    архитектурный стиль определяет набор компонентов и соединений, которые могут
                    использоваться в экземплярах этого стиля, а также ряд ограничений по их возможным
                    сочетаниям. Сюда могут относиться топологические ограничения на архитектурные
                    решения (например, не использовать циклы). Описание стиля также может включать и
                    другие ограничения, такие как, скажем, необходимость обработки семантики
                    выполнения.»


                    ну и в книге описаны признаки слоя (абстрактного), чем он должен быть и чем не должен.
                    И сам подход «многослойная архитектура» как архитектурный стиль описан отдельно.

                    кратко из описания многослойной архитектуры
                    Рассмотрим общие принципы проектирования с использованием многослойной архитектуры:
                    • Абстракция
                    • Инкапсуляция
                    • Четко определенные функциональные слои
                    • Высокая связность
                    • Возможность повторного использования
                    • Слабое связывание
                    • Разделение функциональности
                    • Уведомление на основе событий
                    • Делегированная обработка событий
                    • Изоляция
                    • Управляемость
                    • Производительность
                    • Тестируемость



                    Ну и словосочетание «Архитектурный слой» я как то не особо встречал, либо слой, либо архитектурный шаблон.
                  0

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

                    0
                    какой был бы лучше?
                      –1

                      Слой архитектуры?

                        0
                        Чувство, что меня троллят, но отвечу)
                        Слой архитектуры воспринимается, как будто есть слой архитектуры, а есть ещё какой-то слой (не архитектуры)
                        Когда я говорю Архитектурный слой, подразумевается, что сама архитектура состоит из слоёв
                          –1

                          Не троллят. Вот у меня ровно наоборот. Слой торта для меня — один из слоёв торта, а тортовый слой — слой из торта и бог знает из чего ещё какие слои есть.

                    –1

                    Идея не очень. Откажитесь от нее. Слои сегодня не интересны их обжевали с декаду назад.
                    Архитектура понятие растяжимое, но сегодня архитектур точно не про слои...

                      0
                      чтобы дать ответ как у вас, можно даже не иметь никакого опыта в разработке
                      зайдите для начала на википедию, прочитайте определение Архитектура ПО и всё что в статье, потом можем пообщаться
                        –2

                        Не стоит обижатйся ;) Я в Архитектуре 15 лет.

                          0
                          у вас слишком много времени для троллинга…
                          не пишите сюда больше
                          удачи!
                            –2

                            не вам указывать.
                            Ну рально то что вы описываете это не об архитектуре. И если пишите статьи то получайте фидбек. Да такой короткий фидбек.

                              0
                              не интересует ваш короткий фидбек, спасибо, не пишите сюда
                              «Ну рально то что вы описываете это не об архитектуре» — чувствуется 15 летний опыт…
                      0

                      Слой — это нечто широкое и плоское, в смысле однородное. Там должно быть много такого разного, которое чем-то друг на друга очень похоже.


                      Слоёв всегда несколько, и они параллельны. То есть, можно увидеть направление поперёк слоёв, и некоторую упорядоченность этих слоёв вдоль этого направления.


                      Слои относительно отдельны, то есть у них есть границы, обычно не сильно размытые.


                      Слои либо выделяются сами, просто из-за структуры области деятельности, либо формируются насильно. Второе, ИМХО, приводит к натягиванию сов на глобусы, и ничего хорошего не получается.

                      Only users with full accounts can post comments. Log in, please.