Недавно для себя открыл в полной мере Class Designer в Visual Studio 2005. В полной мере - это значит что теперь я сначала что то в нем рисую, а не делаю классы, а дизайнер использую просто для красивого их отображения (их - это классов);)
Вообще, про то, что Class Designer в VS представляет собой некий аналог диаграмм классов UML, но только для .NET и с моментальным отображением в код и, соотвественно, кода в него (другими словами синхронизация диаграмм и кода), я слышал уже давно. Но до недавнего времени я не уделал этому большое внимание (всетаки раньше я был больше программистом). Недавно же передо мною встала задача спроектировать ряд бизнес объектов. Начал я по старинке, т.е. с написания кода интерфейсов. Через некоторое время меня утомило писать фигурные скобки, геты, сеты и т.п. К тому же при таком подходе небыло видно всей картины в целом (кто от кого наследуется, какие связи существуют между объектами).
Для начала я просто решил воспользоваться Class Designer для того, что бы как раз посмотреть общую картину (точнее показать другим то, что я натворил в красивом виде). Потом я заметил, что изменять название полей, методов, да и добавлять новые гораздо легче с того же самого дизайнера классов (через окно Class Details), к тому же через окно Class Details очень удобно сразу же писать документацию к полям, методам и т.п. Так же довольно просто создать класс, унаследовать его от того, который уже есть на диаграмме, а так же указать что у него должны быть поля вот такого то и такого типа (которые тоже уже есть на диаграмме), одним словом - метод перетягивания "стрелочек" и никакого кода.
Еще один плюс в использовании Class Designer - это то, что видны все связи (ну если отображать некоторые поля как связь), а следовательно гораздо легче принимать некоторые решения. Ну например, был у меня интерфейс "факультет" со своими полями, а так же был интерфейс "кафедра" у которого тоже были свои поля, в том числе ссылка на "факультет", методов ни у одного интерфейса небыло. Увидев же связь, сразу становится понятно, что целесообразно в интерфейс "факультет" добавить метод создания кафедры на этом самом факультете. Может быть это кажется довольно тривиальным примером, но создавал бы я эти интерфейсы ручками в коде, то я бы и не подумал бы про их связь, а так же про то, что у факультета может быть метод создания кафедры на нем - по крайней мере заметил бы это не сразу. Кстати, через дизайнер можно вызвать и часть методов рефакторинга.
Ну, несмотря ни на что, нашлись и некоторые минусы в Class Designer. Например меня огорчил тот факт, что нельзя прямо из дизайнера указать то, что свойство должно быть только на чтение, а не на чтение и запись. Точнее сказать, дизайнер создает для свойства и get и set, а поправить это можно только в коде ручками. Так же довольно сложно указать от каких интерфейсов должен наследоваться конкретный класс (ну или другой интерфейс) - это можно сделать только если интерфейс отображен на самой диаграмме (а вот как добавить стандартный интерфейс на диаграмму? Ну я то на самом деле знаю один способ, но он извращенный).
К тому же, одним из самых больших минусов многие считают отсутствие поддержки Class Designer для C++, говорят она была в бете VS 2005, но ее в итоге исключили из финальной версии, т.к. не успели ее до конца оттестировать (от греха подальше другими словами). Но стоит сказать, что про данный минус я вычитал уже потом, а сам бы его никогда бы не обнаружил, т.к. уже давно полностью продался C# и про C++ вспоминаю только в страшном сне;) Ну и к тому же - в Visual Studio 2008, Class Designer теперь поддерживает и C++.
Так же не стоит забывать, что Visual Studio поддерживает плагины. В том числе мне довольно быстро удалось найти плагин который немного расширяет функциональность дизайнера (в 2005 студии), правда не совсем то, что мне было надо, да и некоторые методы вылетали (судя по трекеру - из-за того, что у меня стоит TestDriven. Странная связь, согласитесь).
Подытожим. Лично по мне, так Class Designer - это очень удобное средство на этапе проектирования, да и не только. Оно позволяет спроектировать систему не прибегая к непосредственному написанию кода. Да, это не вполне UML, но это явно его конкурент, по крайней мере для .NET.
P.S. Кстати говоря, в Visual Studio Team Suit for Architector есть еще ряд дизайнеров, с помощью которых можно конструировать другие схемы чем то аналогичные соответствующим схемам в UML (естесвенно плюс в том, что все это сразу же отражается на коде или еще чем то и синхронизируется с этим чем то), но, к сожалению, про это я пока только мельком читал, так что ничего не могу пока сказать;) Ну и на последок официальный блог Class Designer (жаль что он уже давно не обновляется).
Ну, несмотря ни на что, нашлись и некоторые минусы в Class Designer. Например меня огорчил тот факт, что нельзя прямо из дизайнера указать то, что свойство должно быть только на чтение, а не на чтение и запись. Точнее сказать, дизайнер создает для свойства и get и set, а поправить это можно только в коде ручками. Так же довольно сложно указать от каких интерфейсов должен наследоваться конкретный класс (ну или другой интерфейс) - это можно сделать только если интерфейс отображен на самой диаграмме (а вот как добавить стандартный интерфейс на диаграмму? Ну я то на самом деле знаю один способ, но он извращенный).
К тому же, одним из самых больших минусов многие считают отсутствие поддержки Class Designer для C++, говорят она была в бете VS 2005, но ее в итоге исключили из финальной версии, т.к. не успели ее до конца оттестировать (от греха подальше другими словами). Но стоит сказать, что про данный минус я вычитал уже потом, а сам бы его никогда бы не обнаружил, т.к. уже давно полностью продался C# и про C++ вспоминаю только в страшном сне;) Ну и к тому же - в Visual Studio 2008, Class Designer теперь поддерживает и C++.
Так же не стоит забывать, что Visual Studio поддерживает плагины. В том числе мне довольно быстро удалось найти плагин который немного расширяет функциональность дизайнера (в 2005 студии), правда не совсем то, что мне было надо, да и некоторые методы вылетали (судя по трекеру - из-за того, что у меня стоит TestDriven. Странная связь, согласитесь).
Подытожим. Лично по мне, так Class Designer - это очень удобное средство на этапе проектирования, да и не только. Оно позволяет спроектировать систему не прибегая к непосредственному написанию кода. Да, это не вполне UML, но это явно его конкурент, по крайней мере для .NET.
P.S. Кстати говоря, в Visual Studio Team Suit for Architector есть еще ряд дизайнеров, с помощью которых можно конструировать другие схемы чем то аналогичные соответствующим схемам в UML (естесвенно плюс в том, что все это сразу же отражается на коде или еще чем то и синхронизируется с этим чем то), но, к сожалению, про это я пока только мельком читал, так что ничего не могу пока сказать;) Ну и на последок официальный блог Class Designer (жаль что он уже давно не обновляется).