GUIs in the Modern Age
Modern software has many levelsparticularly so-called web-based software. These levels or tiers include the front end or GUI, the middleware or service layer, and the back-end or persistence layer. Each of these layers can have a number of additional sub-layers. Even just a few front-end pages with a simple service layer and a persistence layer can take many programmers months to produce. For this reason, moving software into a web-based environment is often an expensive proposition. However, it's not all bad!
A great deal of ongoing effort across the industry is now aimed at unifying some of the traditionally separate software layers. One such area of work is object relational mapping (ORM), which seeks to unify the object-oriented world with that of relational databases. In this context, NHibernate is an interesting effort to bring the many benefits of the Hibernate core model to the .NET platform. Technologies such as ORM aim at removing the boundaries between different developers. A skilled ORM developer can write application code that is automatically persisted into one or more relational databases, which helps to reduce the need for separate teams of application developers and database specialists. In effect, ORM helps to merge these traditionally separate disciplines.
Similar unifying changes are afoot in the front end, with technologies such as Spring Web Flow, JavaServer Faces (JSF), and so on. All of these technologies aim to streamline the front-end design and development process and to remove artificial boundaries between different functional areas. So there's a great deal of effort going on in the open source and proprietary worlds to unify software layers.
The area of C# GUI programming has also come on a long way from the early days of Visual C++. An increasingly rich mix of visual elements can be brought together fairly easily. In this article, I use the free Microsoft Visual C# 2008 Express Edition to create a simple GUI. A noteworthy aspect of this Microsoft tool is its support for code generation. Naturally, this feature helps in reducing some of the drudgery of GUI development.
Now let's take a look at the big picture of the application.