DotNetNuke (DNN) is an open source portal that has garnered a great amount of attention in the .NET world in the past year. Written in VB.NET, the DNN project is managed by group of around 30 volunteers known as the Core Team. Evolving over the past few years from the IBuySpy sample application, DNN today enjoys a tremendous amount of community support. At the time of this writing, there are almost 170,000 registered members of the home DotNetNuke.com portal, and an installed base of countless thousands of websites.
Professional DotNetNuke ASP.NET Portals has been authored by seven members of the Core Team, including project founder, Shaun Walker. A DNN installation includes extensive documentation, but this book is not a rehash of that documentation. Instead, this book serves as a good complement to the documentation, adding detail where the documentation is lacking, and providing additional explanations and examples for some of the more complicated topics.
Some of the goals of the DNN project have been to create an application that is powerful and easy to use, and that serves as an example of best practices. Accordingly, this book is not only a how-to guide for using the DNN portal, but also includes clear discussions on best practices such as the Provider model, object-oriented development, and n-tier application structure.
This book comprises 14 chapters and three appendices. Some of the chapters build upon information in previous chapters, while others can stand alone.
Chapter 1 is an in-depth history of DNN, starting with Microsoft and Vertigo Software’s IBuySpy Portal, and leading up to the current release as one of the first major open source projects for the Windows platform. Included in this chapter is the thought that went into releasing such a product as open source (versus a subscription model), and some of the problems faced with starting, managing, and maintaining open source projects. Also covered is how the core team dealt with a serious security vulnerability in version 1. Although purely informational, you finish with a good idea of how committed Shaun and the Core Team are to DNN and the open source community, and the effort that has gone into the project to date.
Chapter 2 covers what you'll need to run DNN on a localhost, and how to install DNN on a localhost or a server you have complete control over. Completely missing is how to set up DNN in a shared host environment. In my experience, DNN has not been difficult to set up on a shared host, but there are a few tricks to figure out. A number of hosts now provide DNN as part of their hosting package, so this may be less of a problem as more hosts add DNN to their offerings.
Chapter 3 is a short overview of what a portal is, and provides a brief introduction to chapters 4-6. Chapter 4 focuses on the role of a Portal Administrator (the Admin login in a default installation). This chapter describes each function of the Admin menu in order, and has examples of how to use the various functions. Chapter 5 does the same for the Host login. Chapter 6 details each of the standard modules included with DNN, including basic configuration and use. Chapters 3-6 are comprehensive yet simple to understand, and could be easily given to clients to show them how to administer their site after you have set it up. If you need an administration guide for clients, these four chapters would be a very good start. A good client manual is not included in the DNN documentation, so if you will use DNN to develop client sites, I suggest keeping this book handy for them.
The transition from chapters 3-6 to chapter 7 is like diving from a warm, comfortable hot tub directly into an icy-cold pool. Chapter 7 begins some very technical discussions of exactly how DNN works. The chapter provides an overview of the DNN architecture, and introduces the Provider model, custom business objects (CBOs) and how they are used by DNN, the multiple tiers used by DNN, the security model, and the namespaces.
Chapter 8 is one of the longer chapters of the book, and is an in-depth discussion of the APIs and interfaces used by DNN. This information sets up the next four chapters, which cover custom module development. All together, these five chapters comprise a significant portion of the book, and provide excellent information for building custom modules, beyond what is included in the DNN documentation. These chapters are arranged so that each one covers a specific tier of your module: chapter 9 covers designing and setting up your project properly, Chapter 10 helps you design your database layer in the context of the Provider model, Chapter 11 covers your business logic, and Chapter 12 guides you through the presentation layer. Something not covered in Chapter 12 is the drag-and-drop interface for modules, which is covered in the DNN documentation.
Skinning is an essential part of a portal application such as DNN, and Chapter 13 introduces creating skins for DNN. Although skinning is very important, I think this is actually one of the weaker chapters of the book. Chapter 13 isn't something you'd want to give to a graphic designer who can't tell an ASCX file from his elbow, and only vaguely understands that the entire application has only one physical page. Since skins can be created either as HTML and CSS files or as an ASPX file with inline code, I would like to have seen the authors split this chapter into two, and provide a little more detail in creating HTML and CSS-based skins for non-programmers, and in creating an ASPX with inline code for programmers who are comfortable with that approach. I feel both are given short-shrift in this chapter. The bulk of Chapter 13 is the listings of the various tokens used in the skins to properly place controls (such as the Login and Breadcrumbs controls) in a skin.
Chapter 14 covers distribution of modules, skins, and language packs, including how to package each and how to add each to a portal. The packaging aspects are not difficult, and this chapter covers them well.
Appendix A lists resources recommended by the Core Team, and a few places to go for more DNN goodies. Although NUnit made the list, I'm not sure that test-driven development was a part of the development cycle for DNN. Appendix B is a short FAQ, and Appendix C covers some of the useful properties of the more important parts of the APIs.
In all, if you plan to implement portals with DNN or to develop modules for the DNN platform, this book is a must-have. Likewise, your clients would benefit greatly from Chapters 3-6. It's not a great resource for skin designers, but it does provide enough information for a DNN developer to guide a graphic designer in creating a skin. This book and the included documentation should be used to complement one another. The Core Team members who authored this book have produced a resource for the DNN community that is almost as valuable as DNN itself.