Written by: Rebecca M. Riordan
Published by: Addison Wesley
This book is a wealth of information. The ABC’s of User Interface design and function it's a must read for anyone that has to design for the masses or for other developers. There are bits of information in this book that one would ever have expected. Rebecca goes all out to explain things that most of us, as developers might never have given that much thought to (take a look at fonts).
This book has 23 chapters in 500 pages. Normally I like to do an outline for each chapter but instead I’m going to give you an overview of each section (5 sections in total). Each section has about 3 to 6 chapters.
Section 1) The Basics: Here we are given some terminology that is to be used throughout the book, as well as some basic information on interface design and graphic design. Some of the bits I found most interesting were (Focus and Flow (12)), (Proximity (16)) and (Contrast (17)). We then dive into GDI (Graphic Device Interface) and get a good dose of the basic coordinate system, points, sizes and rectangles, along with brushes and pens. The part I found most interesting was about the Control Paint Class (page 34). I spent my first years in the workforce as a graphic designer, yet I don’t remember even half of the information she goes though in (Typography and Color). Images are also discussed in this section along with ADO.NET data binding. I found the chapter on ADO.NET Data Binding to be one of the clearest chapters on binding in Winforms development I have seen to date. I haven’t seen much of the information given in such plain easy form even in books dedicated ADO.NET. The whole of Chapter 6 is a must read even if you think you already know data binding.
Section 2) Representing Entities: This section goes though what makes up an entity and the many types. The first chapter (7) of this section is a must read for anyone building data enabled application. It explains so much on how things are interconnected as well as how to design data structures that are interconnected. Chapter 8 and 10 do a great job of explaining form layouts and how objects should be laid out as well has the different types of layouts and forms. The last chapter in this section (10) goes to great lengths to explain how controls are positioned and how to make them more dynamic on the form.
Section 3) Representing Attributes: The four chapters in this section mainly go though the several types of controls and how they are used. It is a great primer for getting to know how to work different types of data with different types of control in different situations. Some of the most useful bits of information are how to control formatting and the displaying of values via the format and parse events of the binding object. This goes a long way into helping one do formatting in all kinds of controls. It also helps fix situations where there are no values. Personally one of the most shocking issues I have to this day is the support of Null’s in many of the controls. A datetimepicker will just freeze your application if the bound value is Null, what’s with this? Using the techniques that are explained in this section you are able to build enhanced versions of many of the problem controls (combobox, checkbox, radio button and datetimepicker). The last chapter in this section invaluable, the Grid Controls. This chapter has a wealth of beginner information on doing many of the operations that I have the need to explain over and over again in many forums. My only problem with the chapter is that Rebecca didn’t go though DataGridColumnStyles and show how custom column styles can improve the Datagrid’s usefulness.
Section 4) Interacting with the user: The First chapter in this section (15) does a great job explaining data navigation and how to set it up. Some of the other contents explain how to handle data and save it. I do have a problem with this in that she uses a typed dataset, which there is nothing wrong with, but as a code example it makes it more difficult for a user to know that (Me.dsFrmNavigation.CustomerListExtended) is actually (Me.dataset.tables("CustomerListExtended") and that CustomerListExtended is a datatable within the dataset. This same kind of syntax is used throughout the book and although it might confuse some, she does go though typed datasets. This should help make it clearer.
The following chapter (16) is a great walk though of widget type controls, (ones that do things when clicked). Rebecca offers a definition in the first chapter that explains this very well. Chapter (17) mainly goes though how to provide assistance to the user. We’ve all seen the helpful tool tips and status bar messages. This chapter provides good grass roots reality of user assistance. Nothing is more annoying than having the same exact message provided to you several ways that doesn’t give you information you didn’t already know (i.e. enter First Name).
Next is Database Integrity (18), this chapter and chapter 7 should have been put together, even though I understand their separation. We also go though validation and the techniques to validate your data. This is one of the most useful and asked about pieces of information you will find in many forums. Next we go into Sorting, Searching and Filtering. If you don’t know how to do these operations with a data table, dataset and/or data view, this is a must read chapter (19). Finally in this section we have Reporting. This chapter is rich in its own right and goes though many of the basics for printing. It then goes into reporting engines and dives into Crystal reports. In my opinion, it could have gone elsewhere. Crystal reports add-in for VS.Net is like the red headed stepchild you don’t want to play with but users insist on it. Rarely does anyone tell you the limits of what you can do with the version included with VS.Net and the costs of deploying a legal system in an enterprise environment. Yet, to give Crystal reports something, it has been the headliner for setting the standard in what report designers and viewers should be like for a long number of years.
Section 5) Building applications: Here we learn how to design and what types of designs work best in different situations. Each situation is gone though and explained. Chapter 22 goes though useful hints on how to improve User Customization of your application. There are a variety of useful hints and idea’s found throughout this chapter.
Our last chapter covers installation, this chapter touches briefly on what’s involved to create deployment files (MSI/Setup.exe’s).
Good Points: This book does a great job of explaining and going though how to make a user interface that is easy for a user that already has windows experience to pick up on your application and run. It explains things in detail and I was thoroughly impressed.
Bad Points: While it was a great UI design book and even included code, I find the lack of examples in the deployment and installation chapter very disturbing. As well as not a single word on how to best handle updating existing software. It is very important to go though your deployment strategy and how to update the end user of your application with the bare minimal annoyance to the end user. Many of these concepts can be achieved in 1.0 and 1.1 of .NET and is made easier in 2.0. It would have enhanced the book if she had covered these concepts.
Over all I give the book a must read rating (8 out of 10). Although it is a shame that the book didn’t flow into the points I mentioned above, it is worth reading and I recommend all to seek it out. I have yet to come across a book of this caliber on this topic and I was very impressed.