C# MVVM – Including Type Name in Variable Names

ccode formattingmvvmvariables

Abstract: Is it acceptable to include the type name in the variable name?

My scenario:

I am working with C# MVVM, and I have a lot of ICommand properties in my ViewModel, named various things like GetSomething, DoSomething, WriteSomething, etc. The "rule" for ordering members in C# is alphabetically, so I have my commands strewn throughout the file. Even if I sort them manually, it can be difficult to remember that GetSomething is a ICommand, especially when there are two methods for each command (the void execute and the bool can execute) and a MenuItem the command is bound to (the menu is generated dynamically in code-behind).

I would like to name my commands CommandGetSomething, in which case I could then have ExecuteGetSomething, CanExecuteGetSomething, and MenuItemGetSomething so that all of the parts for the different commands are at least alphabetically next to each other (ExecuteDoSomething would be next to ExecuteGetSomething would be next to ExecuteWriteSomething).

Am I even trying to solve the right problem here? The ViewModel has about thirty different commands, plus other stuff, so it is important that the file is ordered logically. I use ReSharper to sort the contents, and while I wish that I could sort by type name directly, the closest I can get is alphabetically (which is default).

Best Answer

This is typically referred to as "Hungarian Notation", and is overwhelmingly frowned upon by every source I've ever seen.

The problem is, what happens if you change the underlying type down the road? Now you're forced to either rename all your associated variables, or deal with a potentially misleading name.

Sure, with a good IDE you can easily do a bulk rename if need-be, but at the same time, if you have an IDE capable enough to pull this off, it'll likely also be able to automatically infer the type, and maybe even display the associated documentation.

Let the language and IDE deal with typing. Encoding that information into your names just opens up the potential for mistakes down the road when things inevitably change.

Related Topic