|
|
-
In his blog, Modeling as a Productivity Enhancer in Visual Studio Team System, Barry raises excellent points regarding the areas where the Class Designer can really help developer productivity in the code generation scenarios. I couldn't agree more. However, class designer being a V1 product in Visual Studio, we had to make some hard choices on scenarios we want to focus on and successfully deliver them with high quality. Firstly, we wanted to make sure that class diagrams created are made relevant throughout the development cycle - too often we have heard complaints from developers using UML tools that while the class diagrams they create are great to do initial design, they often go out of date once actual development begins. Secondly, we wanted to make sure that creating and using class diagrams are easy and approachable to developers. The diagrams should speak the language the developers are familiar with - the language they program in. John Stallo, the Program Manager for Class Designer elaborates on these goals in his blog entry "A picture is worth a thousand words" (http://blogs.msdn.com/classdesigner/archive/2005/02/25/380023.aspx). With the main focus on these two goals, we had to cut back on some of the cool productivity features you list above in terms of initial class design. As you correctly point out, there are some types of edits that are better performed in the code editor and some that are intuitive to perform in the class designer. We picked a few of them - interface implementation, overriding members, etc. The Class Designer team will continue to blog highlighting more of these features in the upcoming weeks in its blog. Integrating support for code snippets is probably one of the features we should have added support for but missed. It was something we discussed but we didn't push hard enough to get it in. The same goes for grouping members based on interface implementation, code regions (although this was cut because of some technical difficulties). What other productivity features would you like more? We have already gotten several suggestions from people like Daniel Moth, Tony Loton, and many others. If you have the time please log bugs for your suggestions here: http://lab.msdn.microsoft.com/productfeedback/ This will enable us to collect data on what features customers request the most. Cheers, Ramesh Rajagopal. Class Designer Team.
|
-
John, our PM is collecting feedback on the need and value of visualizing relationships other than inheritance and associations on class diagrams in the class designer team blog. Your perspective on this is very much appreciated. Cheers, Ramesh.
|
-
Thanks for your feedback/comments on this decision. As I mentioned, this was a very difficult decision we had to make. Remember, when we started this project, we could have very well said we are not going to support C++ and spent our resources on other cool features that we had to cut for V1. Instead we continued on our effort to support C++ and only when we realized that we couldn't deliver a high quality product that we made the difficult decision to cut this feature. We felt that support for Intellisense, Project and Build System which are heavily used features required more attention to quality. Certainly support for C++ in Class Designer will be a very high priority in the upcoming releases. More comments and feedback can be found here: http://blogs.msdn.com/classdesigner/archive/2005/03/04/384764.aspx#FeedBack Cheers, Ramesh.
|
-
Today we announced that support for C++ in the Class Designer has been cut. There were several tools in C++ that required attention – for example support for Intellisense, Project System, Build System, Class Diagramming, etc. We believed that we will not be able to address all the issues in all of these features by product release. In the end we decided to concentrate on those features that will benefit the C++ developer the most and delivering a high quality experience around them. Personally this was a very difficult and highly emotional decision for me as our team had spent considerable time and effort into enabling support for C++. Your thoughts and feedback are welcome. Ramesh.
|
-
We have now set up a class designer team blog where various members of the class designer team will be posting articles regularly on class designer. Here is the link to that blog. The first installment is from John Stallo, our Program Manager. This article gives an insight into a couple of the key goals around Class Designer V1. As always your feedback is very much appreciated. Cheers, Ramesh.
|
-
-
Thanks for your participation in the web chat. The turnout was great! There were some great suggestions and feedback. We hope to have more such chats in the future. Cheers, Ramesh.
|
-
In Beta1, Class Designer supported visualizing association relationships between two types where one type contained a field or a property whose data type is that of the second type. For example, if you had a class Customer with a property whose data type is of type “Address”, invoking the “Show as Association” command in the context menu for the property will display an association line between Customer and Address. I find this feature useful when I want to figure out how the various types in my project are associated. You will be able to visualize association regardless of whether the associated type is defined in the same VS Project or in one of its referenced assemblies. If you had a member whose type is that of a strongly typed collection, for example, a property whose type is OrderCollection which is a collection of Orders, most of the time you will be interested in visualizing the relationship between the class and the collected type – in this case Customer and Order, rather than the class and the collection type (Customer and OrderCollection). In Beta 2, you will be able to visualize such associations. There is a new context menu “Show as Collection Association” available on field and property members that will let you visualize the relationship to the collected type. Class Designer uses a heuristic algorithm to create the collection association line when this command is invoked. This is how it works: For the data type of the field or property on which the command is invoked, 1) Determine if the type is a collection. 2) If it is a collection, determine the collected type. The type is a collection if it is an array, a known generic interface (or implements one), a known non generic interface (or implements one), has an indexer or has an enumerator. The heuristic algorithm goes something like this: - If it is an array the collected type is the field type.
- If the type has an indexer, the indexer’s return value is the collected type.
- If the type has an enumerator, the return type of the enumerator’s Current property is the collected type.
- If the type is a known generic interface or if it implements one or a derivative of one, the generic parameter to that interface is the collected type.
- If the type is a known non- generic interface or if it implements one or a derivative of one, the collected type is Object (weak).
Let's say you have code like the following: public class Customer { private IList<Order> orders; } If you invoke the Show as Association command on the orders field in the Customer class, you’ll see the following:  If you invoke the Show as Collection Association command on the orders field in the Customer class, you’ll get the following:  Note the two arrows in the line. That is a visual indication that this is a collection association. Cheers, Ramesh. Ps: Don’t forget the web chat tonight from 5.30 P.M to 6.30 P.M PST. Here is the link to the chat room.
|
-
The Class Designer team will be hosting a Web Chat on February 1st from 5.30 p.m to 6.30 p.m PST. This will be a great opportunity for the team to get your feedback and to answer any questions you may have. Click here for the link to the chat room. Click here to add this event to your calendar. We are looking forward to this event. Hope you will be able to make it. Cheers, Ramesh.
|
-
The image I created for my earlier post on the auto layout feature in Beta 2 was created using the "Export Diagram as Image" feature coming online in Class Designer Beta 2. This is also another feature that was highly requested by customers. When you start a software project, we come up with an initial sketch of the class structures, their members, relationships etc. This picture often gets embedded in some design specification. We may even print this out and paste it on the wall. Soon, the implementation phase begins. In almost all projects I have been involved with (and I haven't heard anything to the contrary), there are changes made to the design. A few weeks later you find that the image in the design spec no longer matches the actual implementation. Since the Class Diagrams created in VS 2005 are just another view of your code, they are always in sync with any changes (there are a few situations when the class diagram may go out of sync - but it will let you know when this is the case - there is a cool feature called "Orphaned Shapes" which I'll have to write about!). The Export Diagram as Image command allows you to publish/update the image in a shared folder. If you have the image linked in your document, you'll then be able to get the image that reflects the latest implementation. Well, now it will be up to you to actually update your documentation. :) While writing this blog, a couple of things that the Class Designer doesn't address in V1 that came to mind. When you actually start designing your project, you may just want to sketch out the classes and their members. You don't want code being generated while you are doing this. Unfortuately that is not possible with Class Designer. This was one of those things that fell below the cut line during the planning stages. It was a hard call but we felt that given the resource constraints we had to focus on the two most important things for V1 - robustness and performance. The other thing we don't do is display the full method signatures of methods. In Beta 2, you'll have the option to display the types of members (return types for methods). However, method parameters will not be displayed on the design surface (they will be available via tooltips). This was a subject of a big debate within the team. But we decided to not display parameter information because of concern that it will take up too much screen real estate. It will be interesting to get feedback on this issue. Cheers, Ramesh.
|
-
There are some really cool features coming online in Class Designer Beta 2 - automatic layout of the diagram, ability to export diagram as an image, display collection associations, display member types, ability to auto adjust the width of the shapes, etc. I will go over the auto layout feature in this post. When I create a diagram to visualize an existing code base (source code or assembly), I expect to quickly create a default diagram of all the types. Then I usually go over the high level class structure of the project. Then I will go ahead and start removing the types that I am not interested in and drill into the details of the rest. In order to do this efficiently, I would like to have the shapes in the auto created diagram organized in some manner that I can understand. In Beta 2, selecting the “View Class Diagram” context menu on a project node in the solution explorer or a namespace node in class view will create a class diagram with shapes for all the types in the project/namespace. Types participating in inheritance relationships will be placed on the left hand side and types not participating in an inheritance relationship will be grouped according to the type (classes, interfaces, enums etc.) and placed on the right hand side. This provides me with a quick understanding of the inheritance hierarchy of the classes in the project. If I want to remove all the types not participating in inheritance, it is very easy for me to select them and remove them from the diagram. The layout algorithm is smart about the white spaces in the diagram and tries to utilize them as much as possible. The shapes are initially collapsed. I can then go and expand the types I am interested in, look at the member details. Now, this may screw up my layout. But not to worry. There will also be a "Layout Diagram" command available to layout the diagram which can be invoked on the entire diagram or on a selection. I can use that command to re-auto layout the diagram. Here is a link to a couple of diagrams (System.Xml and System.IO namespaces) auto laidout by the tool (this is before doing any manual editing). Of course, auto layout will not be able to solve all your layout issues. We have to pick and choose between providing an optimal layout versus performance and other issues. It is intended to give you a running start. You will probably end up manually placing the shapes and rerouting the lines when you are ready to publish the diagram. Yes, you can publish your diagram as images - more on that soon. Cheers, Ramesh.
|
-
I am interested in finding out if you are finding any major performance issues with Class Designer - especially in creating new diagrams or opening existing diagrams. Currently the time taken depends on the size of the project (and of course on your CPU speed, memory etc.) as we parse the code files in the project the first time a diagram is created for a project. When we compare ourselves to the existing UML tools in the market we are doing as well or a lot faster. However, when you compare it with WinForms we don't do so well. : ) Cheers, Ramesh.
|
-
It has been a couple of months since we shipped Visual Studio 2005 Beta1. A lot of customers have started looking into Class Designer. The initial response has been great. We have also been getting great feedback on features that customers would like to see in the product through the logging of bugs/suggestions at the MSDN Feedback Center. Thanks to all that have participated so far. Comments have ranged from "we need something similar to the UML Sequence Diagrams" to "I would like to see member details on the shapes in the class diagram." Logging these issues helps us to understand and track them. More importantly, it gives customers a voice to 'vote' for their favorite feature. While we can't promise all these suggestions will make it into the product this release, adding votes to your favorite feature will certainly increase the likelihood the important ones will. Suggestions that don’t make it into this release will be tracked and considered for future releases. Here is a link to a customer's blog on the class designer features he would like to see in the product. Cheers, Ramesh.
|
-
Currently the Class Designer allows you to edit the diagram (and thereby the code) through in-place editing of type and member names on the diagram. The Class Details Window lets you edit other properties of type members (fields, properties, methods and events) like access modifiers, types of members, parameters to methods etc.
If you don't have VS 2005, you can find a screenshot of the Class Details Window here (towards the end of the document). You can find how to create and modify Class Members here. The Class Details Window provides cool keyboard shortcuts (learn about it here).
I am interested in getting feedback on the Class Details Window.
Thanks,
Ramesh.
|
-
I would like to get feedback on the typical number of shapes you have in a class diagram - is it 10, 25, 50, 100 that you'll be actively using? The reason for this is that we want to optimize the performance for a typical class diagram while you are in active development (as opposed to diagrams that are created for documentation purpose).
My personal preference is to have a diagram of not more than 10-15 shapes that represents the classes I am currently working on. Of course when I want to visualize an existing project, I may want to look at most if not all of the classes in one diagram and see how they are related. But I will just use that as a reference and not the diagram I am actively working on.
|
|
|
|