Book Review - ASP.NET 3.5 Application Architecture and Design

Back in the day, when I began to get interested in ASP.NET application architecture and design, I spent hours hunting for a book that would explain all I needed to know.  I wanted one that focused on ASP.NET, with its special demands, rather than a general .NET development book.  I wanted a book that would explain what layers and tiers were, and how I should separate code out to make it more scalable and reusable.  I wanted a book that would explain how I could take my skills to the next level. I couldn't find one.  There was a big gap in the market.  Vivek Thakur has attempted to fill this gap, with this apty named title: ASP.NET 3.5 Application Architecture and Design.
ASP.NET 3.5 Application Architecture and Design

The book is aimed at beginners and intermediate ASP.NET developers primarily.  Vivek claims in his preamble that experienced developers would also benefit from reading the book.  It is intended to provide an understanding of architecture and design in a practical way, rather than a theoretical one.  The first chapter looks at the difference between tiers and layers, and explains what you get from ASP.NET out of the box.  There is also an interesting, but brief look at project management.  The second chapter looks at the code-behind model in a lot more detail, before dismissing it as suitable only for a simple Guestbook application.  Chapters 3 and 4 look at layers, tiers and spend a bit of time introducing UML, before Chapter 5 looks at ASP.NET MVC.  Design Patterns are the focus of Chapter 6.  Chapter 7 covers Service Oriented Architecture and WCF, followed by Database design in Chapter 8.  Chapter 9 wraps the book up within 250 pages, with a rather unconvincingly tacked-on look at Localisation.

Now, I could have ended my review of this book here.  If I had, you would probably feel the same way as I did when I finished the book - less than satisfied.  One of the main problems with this book is that it simply isn't long enough.  It has the feel of a series of blog posts that have been published over a period, where the author needs to remind the reader of what was said in previous posts made some weeks or months ago.  For a short-ish book, there is a lot of repetition.  And the repetition doesn't make up for the lack of substance.

Vivek introduces a number of concepts, and I am sure that developers who want to learn the basics of structuring an ASP.NET application will get a fair amount out of this book, but it would have been better entitled "Beginning ASP.NET 3.5 Application and Architecture".  It's the lack of deep-diving that prevents this book from becoming a "Bible".  Actually, it's more than that.  The code samples are poorly formatted (although that could be taken care of in a trice if the book is ever reprinted), but the language doesn't flow that well.

Vivek does a good job in explaining how to layer code so that it is more maintainable, reusable, scalable etc.  But he falls into the same cliche that all others who write about architecture seem to. He talks about there being ultimately two kinds of web project - enterprise applications and guestbook sites.  No one discusses the middle ground, which probably accounts for 70% of development.  He doesn't really explain what the tipping points are that should make a developer consider one architectural approach over another.  It's an all-or-nothing kind of thing.

For a book that is aimed at taking developers from the code-behind approach to a higher level, there are serious (in my view) omissions.  Testing is brushed up against in a few places, but I would like to have seen this warrant a separate chapter.  I would like to have the various testing tools explained as well as how to use one or two of them.  I would like to have seen some discussion over the various approaches to larger scale development, such as TDD etc.  There are a lot of other tools available to aid in larger scale development, such as Inversion of Control containers, source control packages, and most obvious of all, Object Relational Mappers.  I was disappointed that none of these were even mentioned.  Even as a beginner, I would love to have known what all these were and whether I should be using them.

If this book had been clearly labelled as a beginners guide, I would probably give it 3.5 out of 5, with the caveat that you would need to pick up other references to provide a full introduction.  If the publishers are serious that the book should be useful to developers who have already moved beyond the SqlDataSource control, I'd givethat claim 0 out of 5.

One final thing.  This is the first Packt book I have ever picked up.  It won't necessarily be the last, but the next book may be if it is as poorly edited as this one.

Date Posted: Sunday, October 11, 2009 6:36 PM
Last Updated: Sunday, October 11, 2009 7:00 PM
Posted by: Mikesdotnetting
Total Views to date: 32159

3 Comments

Wednesday, November 4, 2009 5:54 AM - Alan

I agree with what you said about this being a beginners book. I wasn't too impressed either. And the code formatting was terrible.

Thursday, December 17, 2009 12:21 PM - naveenj

I also felt the same...
Expected a lot more from a guy of Viveks caliber

Friday, February 19, 2010 4:37 AM - Phrasal verb lesson

Thanks for taking the time to discuss this, I feel strongly about it and love learning more on this topic. If possible, as you gain expertise, would you mind updating your blog with more information? It is extremely helpful for me._
Add your comment

If you have any comments to make about this article, please use this form to do so. Make sure that your comment relates specifically to the article above. More general comments can be posted through the form on the Contact page.

Please note, all comments are moderated, and some may not be published. The kind of things that will ensure your comment is deleted without ever seeing the light of day are as follows:

  • Not relevant to the article
  • Gratuitous links to your own site or product
  • Anything abusive or libellous
  • Spam
  • Anything in a language I don't understand including gibberish.

I do not pass email addresses on to spammers, so a valid one will assist me in responding to you personally if required.

Recent Comments

Gautam 11/20/2014 8:01 AM
In response to I'm Writing A Book On WebMatrix
Hello Mike, I read your book, loved it! However, I have a few request/suggestions: 1) an example...

Bret Dev 11/19/2014 8:39 PM
In response to The Difference Between @Helpers and @Functions In WebMatrix
Excellent post! One concern - where can you place global @Functions code within an MVC project to Is...

Rob Farquharson 11/19/2014 4:28 PM
In response to iTextSharp - Links and Bookmarks
How can I place text at an absolute position on the page? Also, how can I rotate text?...

Andy 11/17/2014 8:08 PM
In response to MVC 5 with EF 6 in Visual Basic - Sorting, Filtering and Paging
Hello I'm testing your sorting instructions above. This is great and I was able to get it to work...

Gautam 11/17/2014 5:51 PM
In response to WebMatrix - Database Helpers for IN Clauses
Hi Mike, I am very new to programming: In the above example if I want to use a delete button the...

donramon 11/17/2014 3:22 PM
In response to Entity Framework 6 Recipe - Alphabetical Paging In ASP.NET MVC
Congratulations on your new website look and the excellent articles. Thank you!...

Gautam 11/17/2014 11:26 AM
In response to Looking At The WebMatrix WebGrid
Hi Mike, I add the jquery script at the end of my html file.. when ajax attribute is added to the be...

Chet Ripley 11/15/2014 6:57 PM
In response to Adding A New Field
It appears the command is case sensitive. I had the same issue as Cameron. When I changed the to it...

Alvin 11/14/2014 12:49 PM
In response to Razor Web Pages E-Commerce - Adding A Shopping Cart To The Bakery Template Site
Great article Mike! When do you plan to extend the bakery shopping cart beyond this point?...

Gautam 11/14/2014 10:16 AM
In response to Web Pages - Efficient Paging Without The WebGrid
to get the count can we use only the below sql, why to join category and author table var sql =...