Эта статья написана для всех, кому интересно посмотреть примеры поддержки UML и моделирования в Visual Studio RTM, которая вышла вчера. Собственно я не являюсь большим фанатом UML, MDA и прочих прелестей, но новые VS2010 фичи студии наверняка будут отвлекать разработчиков от Sparx EA (для тех кто на луне – это де факто стандартная тулза для UML), Altova UModel или (боже упаси) Visio, поэтому имеет смысл на них посмотреть с точки зрения юзабельности.
Идеология UML, MDA и иже с ними
Для начала – экскурс в суть проблемы, если так можно выразиться. UML сегодня является стандартом для описания программных систем (да и не только программных, наверное) – штукенция эта проэволюционировала с 1995 года (т.е. ей аж 15 лет) и продолжает “радовать” нас своим присутствием. Вот небольшая иллюстрация (украдено с Wikimedia Commons).
UML, как способ моделирования, попытался взять себе на плечи не только банальное описание системы (а это бы было слишком примитивно, а он посягнул на нечто большее – на генерацию кода из диаграмм, а также так называемый roundtrip engineering – это когда код который вы написали руками программа магически превращала в диаграммы, оставляя при этом реализацию на месте. В принципе, все это счастье должно было работать как часы, но вот незадача – программы которые пытались это делать все капитально провалились.
Лично я “увлекся” UML году так в 2000, когда пошел учиться. В то время существовали две программы – Rational Rose и SELECT Enterprise. Будучи малолетним идиотом, я в то время еще не имел выработанной алергии на производство компании Rational (да-да, это те деятели что происводят эпично-фейловые, но тем не менее массово продающиеся решения вроде ClearCase и ClearQuest), а про Select я вообще ничего не знал (не пытайтесь искать в Википедии, не найдете, но мне кажется что вот это они).
Так к чему я это? А к тому, что программы в то время ничего не умели ни в forward, ни в reverse-engineering. Все обещания об упразднении работы программиста за счет визуальных тулзов оказались полной туфтой. И если вы думаете что тот факт что на дворе 2010й год что-то меняет, попробуйте сделать приложение в том же EA – нет, не типовое приложение которое в самплах лежит, а свое, нужное вам.
К вопросу о Visual Studio
В VS2008 есть поддержка диаграмм классов (расширение .cd
). Диаграммы классов – это одна из основных фич UML, суть которой в иллюстрации зависимости между классами в проекте. Именно поэтому диаграмму классов можно включить только в конкретный проект, что лично я считаю идиотизмом, т.к. документы должны быть в Solution Folder (сугубо имхо). Вот небольшая иллюстрация того, что можно получить:
Фича это была и в 2008й студии. Как ни странно, диаграммы классов позволяют не только быстро получить иллюстрацию (что само по себе круто), но также редактировать класс прямо на диаграмме, с моментальным обновлением кода. Круто конечно, но полезность данной фичи стремится к нулю т.к. поменять public
на private
можно и вручную – для этого даже Решарпер не нужен.
Поддержка вот таких вот диаграмм классов оставлена в Visual Studio 2010 – с ней ничего не случилось. Но для проектов моделирования используются совсем другие, полее продвинутые дизайнеры. Давайте посмотрим.
Те же диаграммы классов, только в VS2010
Итак, появился новый тип проекта под названием Modeling Project:
Добавив этот проект в солюшн, появляется UML Model Explorer (это примерно как DSL Explorer) – новый сайдбар для быстрого просмотра всех UML-элементов. Можно сразу же залесть в Add Item и посмотреть что там предлагают:
Конкретно под UML есть пять типов диаграмм – нас пока интересует диаграмма классов, поэтому выберем ее. Появляется тулбокс, из которого можно перетаскивать элементы. При этом не пробуйте перетащить класс из Class Viewer – не получится!
Почему нельзя выпилить уже существующий класс в диаграмку? Ответ на этот вопрос можно найти на форумах Architecture & Modelling. Если коротко, вот что пишут на StackOverflow:
Basically, this functionality will appear in a power tool release around VS 2010 RTM. I encourage you to post in the forum if you have more questions.
Ну да ладно, реверс-инжиниринг это сложно и фича попросту не готова к релизу (так пишут на форумах), так что если вам это надо, посидите пока на ЕА. А что насчет кодогенерации – хоть она-то работает?
Кодогенерация
Если вы собственноручно попробуете найти генерацию из диаграммы в VS2010, вас ждет провал. Как бы начинается все хорошо – находите вы например ссылку на профиль C#, и начинаете думать что все уже не за горами:
Но, увы и ах, тут все счастье заканчивается и вы погружаетесь, по сути дела, в тот же мир что и при работе с DSL Tools. Самый настоящий Unix Way – если вам что-то нужно, пишите это сами. Да-да, вы меня слышали, ваша диаграмма классов – это всего лишь XML-файл который вы можете смело трансформировать во что-то более полезное. Используя T4, как всегда. Если интересно, можете почитать тут. В принципе, все не так сложно, но было бы круто если бы Microsoft все-таки впихнули эту фичу в RTM. Не успели. Очень жаль.
Еще о реверс-инжиниринге
Диаграммы классов почему-то генерировать нельзя, а вот диаграммы вызовов (sequence diagram) – можно. Но не то чтобы было очевидно как это делать – лично я привык работать с Class View, а там похоже о таком и не слыхали. Приходится открывать контекстное меню в объявлении метода:
Далее появляется интересный диалог с набором опций для генерации:
Дальше студия генерирует диаграмму. Если вызовов много (я натравил ее на свой мега-метод), процесс может занять пару минут.
Ну и наконец можно лицезреть сгенерированное детище. Выглядит, в принципе, неплохо:
Я правда не ручаюсь за полезность сего изыска, т.к. для более-менее сложных вызовов диаграмма получится такой, что потребуется экран размером со стену чтобы лицезреть всю прелесть полностью.
Заключение
Понимаю что коротко, но решил урезать пост дабы “войти в тему” после долгого неписания ничего технического (точнее пишу конечно, только по работе). Тем не менее, позволю себе небольшое заключение. Лично мне кажется, что UML-фичи студии пока сыроваты, особенно для тех кто верит в светлое UMLное будущее. Те же фанаты UML которые постоянно используют этот “язык” в своей работе наверняка останутся на Sparx EA еще долгое время. И нет – я не вижу никакой market opportunity в том чтобы делать из VS2010 некую MDA-ориентированную тулзу а-ля EMF. Это как раз хорошо что Microsoft не циклится на UML, ибо это не будет так сильно отвлекать разработчиков от насущных задач. ▪
Оставить комментарий