Открыть сервис

Model Driven Architecture

Model Driven Architecture (MDA, модельно-ориентированная архитектура) — это подход к разработке программного обеспечения, предложенный консорциумом Object Management Group (OMG) в 2001 году, в котором основное внимание уделяется созданию формальных моделей системы на разных уровнях абстракции, а затем автоматической или полуавтоматической генерации кода и других артефактов на основе этих моделей. MDA является одной из реализаций более широкой концепции Model-Driven Engineering (MDE) и направлена на повышение производительности, переносимости и повторного использования программного обеспечения за счёт разделения бизнес-логики и технических деталей реализации.

История

Идея использования моделей для создания программного обеспечения возникла задолго до появления MDA. В 1980-х и 1990-х годах развивались такие подходы, как CASE-средства (Computer-Aided Software Engineering) и визуальное программирование. Однако они часто страдали от несовместимости между разными инструментами и отсутствия единой методологии.

В 1997 году OMG приняла Unified Modeling Language (UML) в качестве стандартного языка моделирования. UML предоставил общую нотацию для описания структуры и поведения систем, что стало основой для MDA. В 2001 году OMG опубликовала спецификацию MDA, которая формализовала процесс разработки, основанный на преобразовании моделей. Ключевыми фигурами в создании MDA были члены OMG, включая Ричарда Соли (Richard Soley) и Джона Смита (John Smith), а также эксперты из таких компаний, как IBM, Sun Microsystems и Rational Software.

В последующие годы MDA получила поддержку в виде стандартов, таких как Meta (организация признана экстремистской, деятельность запрещена в РФ) Object Facility (MOF) для определения метамоделей, Query/View/Transformation (QVT) для описания преобразований моделей и XML Metadata Interchange (XMI) для обмена моделями между инструментами. Несмотря на первоначальный энтузиазм, широкое внедрение MDA в промышленности оказалось ограниченным из-за сложности инструментов, необходимости высокой квалификации разработчиков и неполной автоматизации преобразований.

Основные концепции

Модели и уровни абстракции

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

  • Computation Independent Model (CIM) — модель, независимая от вычислений. Она описывает требования к системе и её окружение на уровне бизнес-логики, не затрагивая технические детали. CIM часто называют «моделью предметной области» или «бизнес-моделью».
  • Platform Independent Model (PIM) — модель, независимая от платформы. Она описывает функциональность системы без привязки к конкретной технологии или платформе (например, Java EE, .NET, CORBA). PIM фокусируется на логике работы системы, используя абстрактные типы данных и операции.
  • Platform Specific Model (PSM) — модель, специфичная для платформы. Она адаптирует PIM к конкретной платформе, добавляя детали реализации, такие как типы данных, вызовы API, конфигурация сервера и т.д. PSM может быть преобразована непосредственно в исходный код или другие артефакты.

Преобразования моделей

Ключевым механизмом MDA является автоматическое или полуавтоматическое преобразование моделей между уровнями. Преобразования описываются с помощью правил, которые могут быть заданы на языке QVT или в виде шаблонов. Существует два основных типа преобразований:

  • Прямые преобразования — от PIM к PSM, а затем от PSM к коду. Этот процесс обычно включает несколько шагов, каждый из которых добавляет детали реализации.
  • Обратные преобразования — от кода к модели, что позволяет синхронизировать модели с изменениями в коде (round-trip engineering).

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

Метамодели и MOF

Для обеспечения формальной основы MDA использует метамодели — модели, которые описывают структуру других моделей. Стандарт Meta Object Facility (MOF) определяет язык для создания метамоделей. MOF является четырёхуровневой архитектурой:

  • M0 — реальные объекты (например, конкретный экземпляр класса).
  • M1 — модель (например, UML-диаграмма классов).
  • M2 — метамодель (например, метамодель UML, описывающая, из чего состоят UML-диаграммы).
  • M3 — мета-метамодель (MOF, описывающая, как строить метамодели).

Эта архитектура позволяет создавать доменно-специфические языки (DSL) и инструменты для работы с моделями.

Инструменты и технологии

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

  • Eclipse Modeling Framework (EMF) — основанный на Eclipse фреймворк для создания моделей и генерации кода на Java. EMF использует Ecore — реализацию MOF, и поддерживает преобразования через ATL (ATLAS Transformation Language) и QVT.
  • AndroMDA — open-source инструмент, который преобразует UML-модели в код для различных платформ (Java, .NET, PHP). Он использует шаблоны на основе Velocity или FreeMarker.
  • IBM Rational Software Architect — коммерческое средство моделирования, которое поддерживает MDA и интеграцию с другими продуктами IBM.
  • MagicDraw — инструмент моделирования с поддержкой UML, SysML и MDA, который позволяет генерировать код на Java, C++, C# и других языках.
  • OpenArchitectureWare (ныне часть Eclipse) — фреймворк для генерации кода из моделей, использующий шаблоны и скрипты.

Применение

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

  • Разработка корпоративных приложений — создание систем на базе Java EE, .NET или других платформ с автоматической генерацией кода для бизнес-логики, персистентности и пользовательского интерфейса.
  • Встраиваемые системы — моделирование аппаратного и программного обеспечения, генерация кода для микроконтроллеров и DSP.
  • Телекоммуникационные системы — описание протоколов и сетевых архитектур с последующей генерацией реализации.
  • Финансовые системы — создание высоконадёжных и масштабируемых систем с формальной верификацией моделей.

Преимущества и недостатки

Преимущества

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

Недостатки

  • Сложность внедрения — требует высокой квалификации разработчиков и значительных начальных затрат на обучение и настройку инструментов.
  • Неполная автоматизация — многие преобразования требуют ручной доработки, что может привести к рассинхронизации модели и кода.
  • Ограниченная поддержка — не все платформы и технологии имеют готовые инструменты для MDA.
  • Сложность метамоделирования — создание и поддержка метамоделей и правил преобразований может быть трудоёмким.

Критика

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

Интересные факты

  • MDA не следует путать с Model-Driven Development (MDD) — более широким понятием, охватывающим любые подходы, где модели являются основным артефактом разработки.
  • В 2003 году OMG выпустила спецификацию MDA Guide, которая детализирует процесс и терминологию.
  • Несмотря на ограниченное распространение, идеи MDA повлияли на развитие таких технологий, как Domain-Driven Design (DDD) и low-code платформы.

Источники

  • OMG. MDA Guide Version 1.0.1. Object Management Group, 2003.
  • Frankel, D. S. Model Driven Architecture: Applying MDA to Enterprise Computing. Wiley, 2003.
  • Kleppe, A., Warmer, J., Bast, W. MDA Explained: The Model Driven Architecture: Practice and Promise. Addison-Wesley, 2003.
  • Schmidt, D. C. Model-Driven Engineering. IEEE Computer, 2006.
  • Eclipse Foundation. Eclipse Modeling Framework (EMF) Documentation.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →