Sunday, April 1, 2012

VS2010: Objects Navigation Usability Issues


By Mahmoud M.Orabi
 
When working on visual studio or any development IDE, you are going to need to navigate to different objects declaration which means that this feature must be too usable; otherwise, this will slow down your performance at work. Visual studio view object definition way is not that usable especially when you navigate to system resources. In addition, the object viewer seems detached from the source editors which makes it more difficult for the developer to use.

Requirements:

Download and Install Microsoft Visual Studio C# 2010 Express

Description

Start a new “Windows Form Application”. So you will have a default form class created and its associated resources set.
Open the Form.cs file, and drag a button to your form. 

Double click on the dragged button, and make a call to show message box. For example:
private void onMyButtonClick(object sender, EventArgs e) {
            MessageBox.Show("Show Something");
}

While working, assume that you would like to go to MessageBox declaration. In that case you can highlight or put the keyboard cursor at MessageBox, and right click and select “Go to Definition” or just simply press F12. This will take you to the definition of that class. But it will be abstract definition with no implementation. This is not an issue as that class doesn't not have attached source files.
The opened editor will show the namespace details for the opened editor and its operations (which is good):
Now, we know that the namespace is “System.Windows.Forms”. Assume that you would like to know what else is in that namespace. Will you be able to do that directly from that editor? The answer is no. Even, you are not able to do so using the Solution Explorer that is shown by default and you will find that it does not refer to this object.
In order to do that, you will need to use the “Object Browser”. You can bring it by using “control+ W+ J”, or by clicking on the object browser button action:

From the “Browse” selection, choose “My Solution” so this will bring the current objects in your active project:

Well, this is not usable as it seems that you are trying to locate the definitions manually, and you are doing that away from the code editors. Even the browser does not provide a way to filter the displayed items in the explorer. This means that you will need to scroll down and locate the items yourself. The namespace that we are looking for is “System.Windows.Forms” so you will need to scroll down to expand it:

Assume that you would like to open the definition of “ComboBox”. You will be able to see its methods and main operations which are usable to help you to understand how to use it:

However, there is no feasible way to show this object in the document editor. This only works for the user’s created object. For instance, “Form.cs” can be opened in the code editor using the option “Go to Definition”:
This option does not work for the system objects. Although it is not that big deal since we are able to see the definition from the browser tool directly, it is still missing usability support that we are not able to see it in the code editor.
In addition, it does not provide a way to filter items in the tree so it will be more complicated for large projects.
One more thing, the Object Browser is totally separated from the code editors which makes it totally difficult for someone to sync between they want to browser, and what they have opened.
This becomes even worse if you would like to take a quick look at different code definitions on classes that have their code visible in your solution. For instance, you can have a number of 20 classes in a given namespace. You would like to navigate all of them in the code editor. This means that you will need to go though this process 20 times which will lead you to massive number of clicks for something you should expect 20 clicks or barely more.

Suggestions

The “Object Browser” must be associated with the current opened code editors. For instance, when I select a class “Class1” it should be selected as well in the Object Browser window. The same would be in Object Browser, that when select “Class1” this will bring its code editor into focus.
We must also have a tree explorer view that will help us to quickly navigate to the classes directly without needing to switch between different views. The way it works is by focusing on the current namespace and shows it as a parent node on that explorer, and you can simply see the list of classes under that namespace, and you double click each class to open its code editor directly. This will reduce the number of clicks while investigating some code. Moreover, it would be nice to have the capability to filter tree nodes will make it more usable especially for the large projects cases.

Conclusion

We must be able to quickly go to different objects code editors without needing to have many steps in order to do that. This is very important when you are reading codes that have some associated binary assemblies with less documentation , which is unusable the way that we have with the “Object Browser” in visual studio.

No comments:

Post a Comment