Я использую MDSD в проекте с IBM Rational Rhapsody для C ++. Модель довольно близка к UML, поэтому там у нас нет предметно-ориентированного языка. Но все же я бы утверждал, что использовать MDSD. По моему опыту, есть много преимуществ с MDSD:
a) Использование MDSD помогает вывести архитектуру программного обеспечения на сложный уровень. Вы всегда работаете на очень абстрактном уровне, думая о большой картине. Программному обеспечению для ковбойского кодирования обычно не хватает хорошей архитектуры, потому что разработчик застрял в деталях. С MDSD я вижу тенденцию в своей работе решать проблемы с помощью классов соответствующего размера, хороших шаблонов или просто лучшего кода.
б) Большая документация с изображением ПО, как правило, лучше с MDSD. Конечно, есть инструменты, которые автоматически генерируют диаграмму классов из вашего кода. Но эти диаграммы состоят из 1000 классов, и вы не видите аспект интереса. С MDSD вы специально рисуете один аспект системы, и та же самая диаграмма также используется для генерации части вашего кода.
в) Моделирование помогает справиться с присущей системе сложностью. Я бы сказал, что некоторые системы слишком сложны, чтобы их можно было построить без поддержки со стороны компьютерного проектирования. Никто не будет проектировать процессор без помощи огромных программных инструментов. Используйте ПО, чтобы помочь вам написать еще более сложные ПО.
d) Использование MDSD помогает придерживаться принципов стиля кодирования. Нет лучшего способа получить согласованный стиль кода, чем позволить генерировать код с помощью набора правил.
Конечно, есть и некоторые недостатки MDSD:
г) Если у вас есть модель, вы хотите, чтобы каждая строка кода исходила от этой модели. И может быть трудно включить внешние библиотеки в проект. Так что либо вы живете с тем фактом, что ваша система основана на внешних компонентах, либо вы заново изобретаете колесо, чтобы включить его в свою модель.
e) У инструментов моделирования могут возникнуть проблемы с использованием инструментов управления версиями. Исходный код обычно проще объединить, чем диаграмму модели. Это вынуждает команду перейти от рабочего процесса копирования-редактирования-слияния к рабочему процессу блокировки-редактирования-слияния.