MasterPages Rock!

I finally got all the pages in the site using Paul Wilson's MasterPages implementation. I've also changed my mind about needing to skin the site header separately. It will be better to break the site header control up into its constituent components and make them into their own controls and then position them within the MasterPage template. This will allow a great deal of flexibility in terms of design and make the design work very easy to understand for anyone who understands HTML. The templates are just .ascx files with markup. I plan to display them in a dropdown on the admin page. You would simply create a new one and drop it into a folder to add a skin. Of course you would have to include any supporting images and style sheets.

Progress on Skinning

After several hours of tedious find and replace chores to rename some entities in the project I decided to work on the skinning features. In my thinking it breaks down into selectable layout templates, selectable style sheets, and selectable image sets. I think you also have to make the site header control skinnable under its own settings and make it configurable so that you can turn off the top menu if you plan to use a vertical menu on the left side.
So far today I have the page layouts on some of the pages including this one implemented using Paul Wilson's MasterPages. Now that I've figured out how to integrate it, its just mechanical work to do the other pages. The template is not selectable yet but I plan to implement that soon. Amazing how much work I did this weekend and the site doesn't look any different!

Planned Architecture Changes and Notes To Myself

IBuySpy, was not implemented in an OOP style. It uses mostly static methods in its "components" which are really just data access code and are embedded right in the web project. In mojoPortal I have already separated the layers cleanly allowing for interchangeable data layers. I wrote the Blog Module in an OOP style and plan to re-write the other modules in the same fashion. In particular the ModuleSettings and ModuleItems really reperesent the same thing and have overlapping properties that map to the same row in the Modules table. Same thing with the TabSettings and TabItem they will be combined into one class. I also plan to re-name Tab to Page and Portal to Site as I believe they are more intuitive conceptual abstractions. I've never liked the DesktopDefault.aspx page and plan to make that just Default.aspx. I'm not really focused on supporting mobile devices at this point but if I do I'm pondering a separate web site implementation since I think of the whole web site as a presentation layer. I could easily create a thinner presentation layer using the same business objects and I make no assumption at this point that it would be easier to design one site to handle all devices. Then again, maybe that will just be part of a skinning aproach, who knows.

Exciting New Era

As I recall, the IBuySpy Portal reference architecture was released while Visual Studio.NET was in beta and was the first good sample code to help Classic ASP developers make the leap to this new .NET thing. It was later updated for the release and has been used as a starting point in countless private projects and at least 2 notable open source projects, RainbowPortal and DotNetNuke

A lot has happened since then. The .NET Community has blossomed into a wealth of sites with articles, code samples, forums, blogs, and open source projects. Now we have the approaching release of ASP.NET 2.0 and the first release of The Mono Project, a port of the .NET framework that runs on Unix, Linux, and Mac OS X. These are exciting times! The vision of cross platform applications is within reach!

But its not a slam dunk. Chances are the ASP.NET code you've already written will need some massaging to make it work in the case sensitive file and url world of GNU/Linux/Apache. You will also have to add some new skills to your repetoire to learn web server administration in the apache world. My plan with this project is to use what I've learned over the past several years of ASP.NET development and create an improved reference architecture that teaches Object Oriented implementation by example while at the same time fleshing out a truly cross platform, feature rich web site framework that can be used by others as a starting point for their projects as well as my own. When I complete my vision, there won't be much resemblence to the original IBuySpy architecture, but even today it makes a good starting point in terms of functionality.

The Blog Module Is Born

Well I'm happy to report that the Blog Module is now fully functional.

The Milestones to date are:

  • The project currently runs under mono/apache/gnu/linux
  • The Business and Data Access code has been cleanly separated from the presentation logic in the web
  • The tables and stored procedures have better naming conventions
  • It now works with MySQL!!! - As of 8/12/2004, this site is now using MySQL 4.0.20 for the database