Модульное программирование
Существуют различные методы создания программ. Каждый предусматривает свои особенности, а также принципы организации работы. Пример – объектно-ориентированное программирование. В данном случае код строится на взаимоотношениях и связях различных компонентов, а не только на логике и абстракциях.
Огромную роль для разработки играет архитектурный подход, носящий название «модульное программирование». Рассмотрим его подробнее.
Определение
Модуль в информатике и программировании – блок программы. Он имеет конкретное функциональное значение. Характеризуется своей полной логической завершенностью.
Так принято называть метод создания программного обеспечения через объединение имеющихся модулей (блоков) в единую общую структуру.
Такое программирование нацелено на:
- повышение скорости создания ПО;
- обеспечение надежности приложения;
- упрощение процедуры тестирования.
Программирование «по модулям» особо удобно для ситуаций, когда в команде разработчиков много участников. Там, где в основе заложен командный труд. Каждый человек сможет сконцентрироваться на собственной задаче, не переключаясь к проблемам остальных.
Вы не захотите быть моделью, посмотрев это видео. Недостатки работы моделью
Для чего нужен
Каждый проект в программировании – это специально составленный код. Его может быть очень много. Даже небольшой объем исходного кода иногда приводит к проблемам обновления, поддержки и исправления ошибок. Запутаться в нем легко, если нет строгой структуризации.
Разбиение будущего приложения на модули – наиболее рациональный подход. Он помогает решать определенные проблемы программирования:
- Код становится более читаемым, понятным и прозрачным. Для этого требуется грамотно классифицировать модули.
- Разрешение конфликтов имен. Такая ситуация неизбежна, если в коде присутствуют десятки идентификаторов. Все они обычно расположены в одной области видимости. Путем деления на модули можно «отсекать» лишние блоки кода. Этот прием устраняется конфликты идентификаторов.
- Повышение надежности. Рассматриваемая концепция способствует осуществлению инкапсуляции программного кода. Каждый блок будет изолирован от другого.
В информатике и программировании модуль – важный компонент. Далее соответствующий процесс создания программ будет рассмотрен более подробно.
Ключевые принципы
Метод модулей в разработке появился благодаря канадскому программисту – Дэвиду Парнасу. Он предположил, что для создания «отдельного блока кода» достаточно минимального набора знаний о содержании других. На подобном высказывании базируется концепция сокрытия информации и программировании.
Сокрытие – это метод проектирования, который предусматривает разграничение доступа разных частей (модулей) продукта к внутренним элементам друг друга.
Процесс написания контента подобным образом будет выглядеть так:
- Описание информации/данных.
- Проектирование. Осуществляется по нисходящему принципу.
- Модульное программирование.
- Описание и создание главного программного обеспечения.
- Сборка готовой утилиты.
Структурными единицами здесь выступают совершенно разные компоненты – от сервисов до фреймворков. Главное, чтобы они отвечали за конкретные функции. А еще – могли предоставить к ней непосредственный доступ.
Разоблачение модельная школа / Почему это не моделинг
Виды
Если говорить об информатике, то она предусматривает еще несколько определений модуля:
- команды, которые обладают собственным обозначением и возможностью вызова по имени;
- совокупность программных операторов с идентификаторами и граничными элементами.
Существуют разные виды модулей:
- Малоразмерные. На реализацию таких модулей отдается единственная заданная функция. Большинство языков программирования определяют в качестве своего элементарного компонента процедуру или заданную операцию.
- Среднеразмерные. Представлены небольшим набором операций или функций.
- Крупные. Они предусматривают включение в свой состав нескольких малоразмерных и среднеразмерных модулей.
Примеры последних – это наборы пакетов в Java или Ada.
Ключевые проблемы
Несмотря на то, что рассматриваемый вариант к созданию программного обеспечения является удобным и эффективным, он имеет некоторые недостатки. К таковым относят следующие моменты:
- требования к памяти устройства – она должна быть увеличенной;
- более долгая компиляция и загрузка софта;
- медленное исполнение исходного кода – особо актуально для крупных приложений;
- риски создания слишком сложных алгоритмов взаимодействия.
Лишь грамотный и основательный подход к ТЗ и составлению структуры утилиты поможет устранить последний недостаток. В умелых руках модульное программирование дает одни только плюсы.
Где реализуется
Для того, чтобы пользоваться рассматриваемой парадигмой, разработчику предстоит выучить конкретные языки. Концепция модулей поддерживается в:
- Кобол;
- Ада;
- Фортран;
- Паскаль;
- Оберон;
- Модула-2;
- Zonnon;
- Erlang;
- Perl;
- Ruby.
Еще один довольно интересный вариант – это Python. Данный язык является одним из наиболее популярных в 21 веке. Поэтому модульное программирование нельзя назвать устаревшим. Оно весьма активно применяется на практике.
Отличие от микросервисов и библиотек
Модуль – это не микросервис и не библиотека, хотя определения напоминают соответствующие компоненты. Вот ключевые различия с предложенными элементами кода:
- отсутствие горячей замены части кода в работающей утилите;
- невозможность запуска независимо от программы;
- отсутствие масштабируемости отдельно от остальных модулей;
- модуль не предоставляет функции, которые могут вызывать другие блоки кода;
- обладает собственными изолированными хранилищами информации и параметрами.
Дистанционные онлайн курсы помогут быстрее разобраться в выбранном направлении с нуля.
Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в Otus!
Источник: otus.ru
Что такое модульное обучение?
Всё популярнее с каждым годом становится модульная форма обучения. Благодаря своей динамичности и высоким результатам эта система с успехом завоёвывает себе место в образовательных учреждениях.
Так ли хорошо «учиться по модулям»? Разбираем все плюсы и минусы модульной формы обучения.
12 декабря 2018
Поделитесь в соц.сетях
Что такое модуль?
Термин «модуль» является ещё совсем молодым понятием в современном образовании России. Естественно, наши с вами родители впервые слышат о такой системе, однако сведущие люди и педагоги знают, что скрывается за этим словом.
Модуль — это часть образовательной программы, в которой изучается несколько предметов и курсов. Часто модулем называют часть программы курса по конкретной дисциплине, комплекс предметов или программу учебного курса.
Главным отличием модульной формы обучения от традиционной является самостоятельная работа учащегося. Школьник изучает предмет, а преподаватель координирует и контролирует его деятельность, организовывая учебный процесс, консультируя и мотивируя ученика. Новая информация преподаётся в виде блоков, при изучении которых и достигается конкретная педагогическая цель. Форма общения между преподавателем и учеником тоже отличается от традиционной формы обучения: школьник имеет индивидуальную траекторию обучения.
Модуль в современном российском образовании является:
- частью образовательной программы;
- фундаментом для формирования новых учебных программ;
- основой для модернизации курсов повышения квалификации.
Структура модульного обучения
Образовательный процесс с модульной формой обучения основывается на учебных планах, утверждённых Министерством образования и наук Российской Федерации.
Структура образовательной программы содержит несколько модулей. Исполнение модулей выражается в кредитах. Один кредит содержит тридцать шесть академических часов. За учебный год учащиеся должны освоить шестьдесят кредитов. Работы по кредиту делятся на:
- практические и лабораторные работы;
- лекции;
- семинары;
- самостоятельная работа;
- консультации, экзамены и квалификационная работа.
Каждый модуль состоит из учебных элементов (обычно пять-восемь элементов в одном модуле), состоящих, в свою очередь, из цели, списка материалов, пособий и проверки полученных знаний.
Среди учебных элементов различают:
- введение,
- учебные цели,
- базовые проблемы элемента (кейсы),
- текстовая информация,
- упражнения,
- заключения,
- библиографический список,
- словарь терминов.
Цель модульного обучения — организация и осуществление учебного процесса, построенного по принципу самостоятельной работы учащегося, повышение эффективности и качества обучения школьников, формирование универсально-профессиональных компетенций. Учебные модули построены так, чтобы помочь ребёнку разобраться со всеми стоящими перед ним задачами, овладеть нужной информацией, успешно усвоить материал.
Оценка усвоенных знаний происходит посредством рейтинговой системы оценок.
Школа Монтессори
Приемы методики раннего развития детей, разработанные Марией Монтессори, получили широкое распространение. Согласно ее методике, каждый ребенок особенный. Он должен развиваться и обучаться в свободном пространстве при поддержке любящих взрослых. Цель этой книги — показать различие между дошкольными и школьными группами, а также выявить потенциал начальной школы, работающей по системе Монтессори, и перспективы ее развития в нашей стране.
Модульная система обучения
Модульная система обучения работает в формате Европейской кредитно-трансферной системы (Болонской системы, ECTS), основанной на объеме учебной нагрузки, выполненных кредитов.
Модульная форма обучения основывается на модульном (с помощью блоков) построении учебного материала, оценивающегося суммой рейтинговых баллов за различные виды работ. Педагог самостоятельно решает, какое количество баллов определить для каждого модуля и вида учебной деятельности.
Формы контроля модульного обучения
В отличие от традиционной, модульная форма обучения имеет следующие виды контроля:
- зачет;
- устный опрос;
- тестирование;
- модульный контроль;
- итоговый контроль.
Оцениваются усвоенные знания в набранных баллах по шкале ЕСТS. Так, если соотносить привычные нам отметки с рейтинговыми баллами, получим следующее:
- «отлично» — 90-100 баллов (отметка А по шкале ЕСТS);
- «хорошо» — 75-89 баллов (В, С);
- «удовлетворительно» — 60-74 балла (D,E);
- «неудовлетворительно» + возможность пересдачи — 35-59 баллов (F, X);
- «неудовлетворительно» + обязательный повтор курса — 1-34 балла (F).
- Виртуальная реальность для трансформации учения и обучения
- Какие компетенции нужны современным школьникам, и формирует ли их школа?
- Наставничество в школе: работа с подростками
- Профориентация в старшей школе
- Вширь или вглубь? Экстенсивное и интенсивное образование
Плюсы и минусы модульной формы обучения
А теперь поговорим о положительных и отрицательных сторонах модульного обучения.
Преимущества модульной формы обучения:
- неоспоримая эффективность;
- индивидуализация обучения;
- формирование хода обучения исходя из личных потребностей ученика;
- адаптация учебного материала согласно индивидуальным возможностям и педагогическим целям;
- равномерное распределение учебной нагрузки;
- оценка знаний по итогам проделанной работы (конкретное количество баллов, которое исключает субъективное отношение преподавателя);
- сокращённые сроки обучения;
- возможность удалённого обучения.
Отрицательные стороны модульного обучения:
- высокий уровень самоорганизации и индивидуальной работы;
- возможны случаи неудачного подбора материала в рамках одного блока/модулей;
- временное ограничение для выполнения заданий;
- временные затраты на подготовку модульных программ и материалов;
- адаптация к новой форме обучения;
- отличное от традиционных школ расписание каникул (что не всегда удобно для родителей).
Рассмотрев положительные и отрицательные стороны модульного обучения, отметим, что плюсов (по крайней мере, для ученика) значительно больше, чем недостатков. Эффективность обучения, его качество, приучение к самостоятельной работе — это неоспоримые благоприятные черты обучения, к которым следует стремиться. Именно поэтому модульное обучение является столь инновационной и динамичной педагогической технологией, которую перенимает всё большее количество образовательных учреждений.
Источник: rosuchebnik.ru
Что такое модульное программирование и кому оно нужно
В любой профессии, не только в программировании, вы переживаете разные эмоциональные состояния по ходу выполнения проекта:
- Сначала есть энтузиазм от перспектив и возможностей.
- Затем приходит азарт. Первые ошибки и трудности вас только раззадоривают, заставляя мозг и фантазию работать на полную катушку.
- Следом проседает концентрация. В какой-то момент вы перестаёте обращать внимание на предупреждения и мелкие ошибки, откладывая решение этих проблем на потом.
- В итоге вы теряете мотивацию. Вы исправляете одну ошибку – появляется три. Вы пытаетесь добавить новую функцию, но выкидываете идею в мусорное ведро из-за нежелания тратить на это много времени.
Некоторые думают, что это нормально: стоит смириться и каждый раз проживать этот цикл. На деле же всё немного проще, и решение лежит не в области психологии, а в подходе к созданию кода.
Классическая проблема программирования
В западной литературе существует термин «big ball of mud» для описания архитектуры программы. Давайте переведём его дословно. Графически «большой шар грязи» можно представить в виде точек на окружности, символизирующих функциональные элементы, и прямых – связей между ними:
Похоже на ваши глаза перед сдачей проекта, не так ли?
Это иллюстрация той сложности, с которой вам надо работать, какое количество связей учитывать, если возникает ошибка.
Программирование не уникальная дисциплина: здесь можно и нужно применять опыт из других областей. Возьмём, к примеру, компьютер. Их производители не задумываются над многообразием задач, которые решает пользователь, и уж тем более не выделяют под каждую маленький процессор и память. Компьютер – это просто набор независимых сложных объектов, объединённых в одном корпусе при помощи разъёмов и проводов. Объекты не уникальны, не оптимизированы конкретно под вас, и тем не менее блестяще справляются со своей задачей.
В программировании есть точно такие же решения. Например, библиотеки. Они помогают не тратить драгоценное время на изобретение велосипеда. Однако для частных задач библиотеки не эффективны – создание отнимет уйму времени, а при единичной повторяемости эффективность стремится к нулю.
В этом случае полезнее обратиться к модулям. Модуль – логически завершённый фрагмент кода, имеющий конкретное функциональное назначение. Для взаимодействия модулей используются способы, не позволяющие изменять параметры и функциональность. Плюсы модульного программирования очевидны:
- Ускорение разработки.
- Повышение надёжности.
- Упрощение тестирования.
- Взаимозаменяемость.
Модульное программирование крайне эффективно при групповых разработках, где каждый сотрудник может сконцентрироваться только на своём фронте работ и не оглядываться на решения коллег. Однако и в индивидуальном подходе вы получаете, как минимум, вышеописанные преимущества.
Но не всё так просто.
Проблемы модульного программирования
Сама по себе идея использования модулей не сильно упрощает код, важно минимизировать количество прямых связей между ними. Здесь мы подходим к понятию «инверсия управления» (IoC). Упрощённо – это принцип программирования, при котором отдельные компоненты кода максимально изолированы друг от друга. То есть детали одного модуля не должны влиять на реализацию другого. Достигается это при помощи интерфейсов или других видов представления, не обеспечивающих прямого доступа к модульному коду.
В повседневной жизни таких примеров множество. Чтобы купить билет на самолёт или узнать время вылета, вам не надо звонить пилоту. Чтобы выпить молока, не надо ехать в деревню или на завод и стоять над душой у коровы. Для этого всегда есть посредники.
В модульном программировании существует три основные реализации:
- Внедрение зависимостей. Способ, при котором каждый элемент имеет свой интерфейс, взаимодействие модулей происходит через интерфейсы.
- Фабричный метод. Основывается на существовании некого объекта, предназначенного для создания других объектов. Иначе говоря, введение в программу прототипа, объединяющего общие черты для большинства объектов. Прямого взаимодействия между модулями нет, все параметры наследуются от «завода».
- Сервисный метод. Создаётся один общий интерфейс, являющийся буфером для взаимодействия объектов. Похожую функцию в реальной жизни выполняют колл-центры, магазины, площадки для объявлений и т.д.
Несмотря на то, что первая реализация IoC используется чаще всего, для первых шагов в модульном программировании лучше использовать другие два. Причина – простое создание интерфейсов лишь ограничивает доступ к модулям, а для снижения сложности кода необходимо также уменьшить количество связей. Интерфейсы, хаотично ссылающиеся на другие интерфейсы, код только усложняют.
Для решения этой проблемы необходимо разработать архитектуру кода. Как правило, она схожа с файловой структурой любого приложения:
Таким образом, поддержка принципов модульного программирования, инверсии управления и четкой архитектуры приложения поможет убить сразу трёх зайцев:
- Обеспечить чёткое функциональное разделение кода. При возникновении ошибок можно быстро определить источник, а исправления не приведут к появлению новых сбоев.
- Минимизировать количество связей. Это позволит упростить разработку, отдав на откуп нескольким разработчикам разные модули. Или вы сможете самостоятельно разрабатывать каждый блок без оглядки на другие, что тоже экономит время и силы.
- Создать иерархию с чёткой вертикалью наследования. Это повышает надёжность кода, так как тестирование провести проще, а результаты информативнее.
Соблюдение принципа модульности в больших проектах позволит сэкономить время и не расплескать стартовый задор. Более того, у вас получится наконец сосредоточиться на самом интересном – реализации оригинальных задумок в коде. А ведь это именно то, что каждый из нас ищет в программировании.
Источник: gb.ru
Модульный монолит. Начало
Привет, меня зовут Андрей и я разработчик. Наша команда работает над мобильным приложением для стартапа Dodo Brands — сети кофеен Дринкит. Несмотря на популярность микросервисов, при проектировании бэкенда для мобильного приложения мы всё-таки решили не торопиться и развиваться последовательно. Поэтому наш бэкенд — это модульный монолит.
Модульный монолит — это подход к проектированию приложений, который позволяет, с одной стороны, отложить во времени операционную сложность использования микросервисов, а с другой — избежать превращения монолитной системы в большой комок грязи.
Сама идея модульности не нова и основана на давно известных принципах Separation of Concerns и Information Hiding. Но не так-то просто перейти от абстрактных принципов к пониманию, как их реально использовать на практике.
Для меня важным источником знаний стал проект Камиля Гржибека, в который мне посчастливилось контрибьютить. А основные идеи, которые автор вкладывает в понятие модульной архитектуры, он подробно описывает в серии статей своего блога. На Хабре не так уж много информации о модульных монолитах в целом и практически ничего о конкретных вариантах их реализации. Поэтому под катом перевод первой статьи серии.
Много лет прошло с начала расцвета микросервисов, но это до сих пор одна из главных тем, обсуждаемых в контексте архитектуры программных систем. Популярность облачных решений, контейнеризация, новые удобные инструменты для разработки и поддержки распределённых систем (такие как Kubernetes) ещё больше способствуют этому явлению.
Из наблюдений за тем, что происходит в сообществах, компаниях и из обсуждений с разработчиками складывается впечатление, что большинство новых проектов реализуются в микросервисной архитектуре. Более того, распиливание существующих монолитов на микросервисы стало трендом.
Почему я начал с микросервисов статью, посвящённую модульному монолиту? Потому что, на мой взгляд, мы, как IT индустрия, делаем ошибку, применяя микросервисы настолько широко. Вместо того чтобы сфокусироваться на конкретных требованиях к архитектуре, мы часто рассматриваем микросервисы как лекарство от всех болезней.
В то же время в этих болезнях по умолчанию обвиняются монолитные приложения. Если вы хоть раз разрабатывали систему, состоящую из более чем одной единицы развёртывания, то знаете, что всё не так безоблачно, как может показаться. Каждая архитектура имеет свои достоинства и недостатки. Каждая решает одни проблемы и в то же время создает другие.
В таком контексте я хотел бы начать серию статей об архитектуре модульного монолита, и делаю это по нескольким причинам.
Во-первых, хочу развеять миф о том, что нельзя построить высококлассную систему в монолитной архитектуре. Во-вторых, хотел бы внести ясность в определение этой архитектуры, потому что многие интерпретируют её по-разному. В-третьих, эти статьи являются дополнением к проекту (reference application), который доступен на GitHub.
Я всегда стараюсь быть точным, когда говорю или пишу о технических или бизнес-вопросах, особенно, когда речь идёт об архитектуре. Уверен, что ясная и целостная картина крайне важна. Поэтому в первой статье я расскажу, что же такое модульный монолит в моём понимании.
Давайте начнём с того, что такое «монолит».
Монолит
Википедия описывает монолитную архитектуру в контексте строительства следующим образом:
монолитная архитектура описывает строения, которые отлиты или высечены из цельного материала, традиционно из камня.
В терминах разработки ПО строения — это программные системы, а материалы — это исполняемый код. Таким образом, монолитная архитектура предполагает ровно одну единицу исполняемого кода и ничего больше.
Давайте теперь обратимся к двум определениям из мира ПО. Первое о монолитной системе:
программная система называется монолитной, если она имеет монолитную архитектуру, в которой разные аспекты функциональности (например, ввод-вывод, обработка данных и ошибок, пользовательский интерфейс) связаны воедино, а не содержатся в архитектурно независимых компонентах.
монолитная архитектура — это традиционная универсальная модель проектирования ПО. Монолитный в данном контексте значит собранный в единое целое. Компоненты программы связаны и взаимозависимы, а не обладают слабой связанностью (low coupling — прим. перев.), как в случае модульных программ.
Определения выше (одни из первых результатов поиска в Google) основаны на двух предположениях.
Первое: в монолитной архитектуре все части системы формируют одну единицу развёртывания. И я с этим согласен.
Второе: в монолитной архитектуре отсутствует модульность. И с этим я совершенно не согласен. Фразы «связаны воедино, а не содержатся в архитектурно независимых компонентах» и «компоненты программы связаны и взаимозависимы, а не обладают слабой связанностью» крайне негативно характеризуют такую архитектуру, предполагая, что в ней все части смешаны в беспорядке. Конечно, это может быть так, но не должно. Это не является отличительной чертой монолита.
Таким образом, монолит — это не что иное, как строго одна единица развёртывания. Ни больше, ни меньше.
Модульность
Теперь перейдём к модульности.
Что означает термин «модульный»?
Состоящий из отдельный частей, которые вместе формируют целое / Выполненный из набора отдельных частей, которые могут быть объединены в более крупный объект.
проектирование или производство чего-либо в виде отдельных частей.
Т.к. это общее определение, оно недостаточно, когда речь идёт о разработке. Давайте рассмотрим более специфичное — о модульном программировании:
Модульное программирование — это способ разработки ПО, который подразумевает организацию программы как совокупности независимых, взаимозаменяемых блоков (модулей), каждый из которых содержит всё необходимое для реализации определённого аспекта функциональности. Интерфейс модуля описывает элементы, которые он предоставляет и которые требует для своей работы. Эти элементы интерфейса доступны другим модулям. Реализация модуля содержит исходный код, который соответствует элементам интерфейса.
Хочу отметить три важных момента в этом определении. Чтобы архитектуру можно было назвать модульной, модули должны:
- быть независимы и взаимозаменяемы;
- иметь всё необходимое для реализации определённой части бизнес-функционала;
- иметь чётко определённый интерфейс.
Давайте разберём подробнее каждый пункт.
Модуль должен быть независимым (автономным) и заменяемым
Конечно, модуль не может быть абсолютно независимым, тогда бы вообще отсутствовали интеграции с другими модулями системы. Идея в том, чтобы, следуя принципам слабой связанности и высокой сосредоточенности (Loose coupling and High cohesion), свести эти зависимости к минимуму.
В левой части схемы мы видим модуль с большим количеством зависимостей и явно не можем назвать его независимым. С другой стороны, на правой диаграмме ситуация отличается — зависимостей у модуля меньше.
Но количественная характеристика не является единственной при определении степени зависимости модуля. Также важна сила этих зависимостей. Иными словами, как часто и какое количество методов других модулей используется.
В первом случае, возможно, мы неверно определили границы модулей и на самом деле должны объединить их в один.
Ещё одной характеристикой зависимости является частота изменений модулей, от которых зависит рассматриваемый модуль. Очевидно, что чем выше их стабильность (изменения происходят редко), тем меньше негативное влияние зависимости на рассматриваемый модуль.
Правила формирования зависимостей с точки зрения изменчивости компонентов описывает Stable Dependency Principle (прим. перев.).
Подводя итог, независимость модуля определяется тремя характеристиками:
- Количество зависимостей.
- Сила зависимостей.
- Стабильность модулей, от которых зависит рассматриваемый.
Отношения модулей должны напоминать отношения деловых партнёров, а не сиамских близнецов(С.Макконнелл, Совершенный код) (прим. перев.).
Модуль должен иметь всё необходимое для реализации определённой части бизнес-функционала
Значение термина «модуль» сильно зависит от контекста. Часто модулем называется логический слой в архитектуре: модуль пользовательского интерфейса, модуль бизнес-логики, модуль доступа к данным. В данном контексте это тоже модули, но разделённые по техническому, а не функциональному признаку. Формирование модулей по техническому признаку позволяет локализовать в одном модуле возможные технические изменения.
Добавление или изменение бизнес-функционала обычно затрагивает все слои, что приводит к необходимости изменений во всех технических модулях-слоях.
Что мы делаем чаще: чисто технические изменения или изменения бизнес-функционала? На мой взгляд — второе. Нам редко приходится менять слой доступа к данным, библиотеку логирования или UI-фреймворк. Именно по этой причине в контексте модульного монолита мы говорим о бизнес-модуле, который предоставляет определённую законченную часть бизнес-функционала системы. Такой архитектурный паттерн известен также как «вертикальные слои» (Vertical slices). И вот их мы объединяем в модуль:
При такой архитектуре (и при условии правильного разделения на модули) изменение или добавление функционала чаще всего затрагивает только один модуль. Значит, он становится автономным и способным предоставить определённый функционал самостоятельно.
Правила объединения классов в компонент с точки зрения причины их изменений описывает Common Closure Principle. А в этом треде Камиль Гржибек и Джимми Богард обсуждают Vertical Slices (прим. перев.)
Модуль должен иметь чётко определённый интерфейс
Последней характеристикой модульности является четко определённый интерфейс. Мы не можем говорить о модульной архитектуре, если наши модули не имеют контрактов.
Контракт — это то, что модуль предоставляет вовне, а значит является крайне важным. Контракт — это точка входа в модуль. Хороший контракт — непротиворечивый и минимальный (предоставляет только то, что необходимо клиенту).
О минимальности интерфейса компонента говорит Common Reuse Principle (прим. перев.).
Мы должны поддерживать контракт стабильным (не ломать клиентов) и скрывать детали реализации (инкапсуляция).
Как видно из схемы, контракт модуля может принимать разные формы. Это может быть что-то вроде фасада для синхронных вызовов (как публичные методы REST сервисов). Но контрактом могут быть и публикуемые события для асинхронного взаимодействия. В любом проявлении то, что мы выставляем вовне модуля, становится его публичным API. Таким образом, инкапсуляция является неотъемлемой чертой модульности.
Итог
- Монолит — это программная система, состоящая из ровно одной единицы развёртывания.
- Монолитная система не подразумевает некачественного дизайна и отсутствия модульности. То, что система монолитная, ничего не говорит о её качестве.
- Модульный монолит — это способ проектирования монолитной системы с учётом модульности.
- «Настоящий» модуль должен быть независимым, самостоятельным и иметь чётко определённый интерфейс.
- domain-driven design
- clean architecture
- modular monolith
- modularity
Источник: habr.com