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 →