If you wander why I have not published a single line of code from Project Banana, it’s because I am not happy with it yet.
I have some fully working code of version 1 with an engine but the architecture is wrong and it does not have CMS/SMS, it was a prototype to prove that certain aspects could be done. However, version 1 used too much bandwidth, was not search engine friendly (and could never be), was solely based on ASP.NET 2.0, could not make use of URL rewriting, was not maintainable and used ASP.NET Ajax which is too bulky for South African bandwidth.
Then I started version 2, keeping in mind the issues that were raised in version 1, I started to look for an ASP.NET platform to work form. I looked at a couple of approaches such as MVP Pattern as implemented in Web Client Software Factory which had 70% of my basic requirement out the box, however it was not going to work in a Medium Trust environment and needed major changes to do so, hence I gave it up, it may very well have been my worst decision. Then came ASP.NET MVC, though it only has 40% of my requirements, I thought it was to be my saviour, it may work beautifully for the public facing web application but would bring very little for the SMS, so I abandoned it but only for the SMS. I still think that the website API can work well with MVC. After much debate, I opted to try to create a base framework of my own, one I have now abandoned and let me explain why.
Firstly, my core requirements for the Site Management System (SMS) are as follows:
- Modular, plug in a new module maybe run an SQL script and voila the SMS functionality is working. This means that it will integrate itself into the SMS without the need to configure anything, in short copy a folder to the SMS and it auto-magically works, integrates into the menu, uses the SMS HTML layout, configurations and database without further intervention. (WCSF does most of this out of the box)
- Updatable modules, bug fixes should only affect the module affected and not break the site.
- Upgradable modules, assuming that the client wants to upgrade a module to something more complicated it should be as easy as copying it across and maybe run a SQL script, thus no loss of data. The upgraded module must be compatible with the previous module’s API and database.
- I also want to start using TDD for this as there are needs for backward compatibility and there will be more than one developer on this project sooner or later, something that “classic” ASP.NET does not provide. (WCSF does this out of the box)
- Highly optimized HTML output for fast responses in the South African bandwidth environment.
- Lastly, I want to secure the code at least for now until I decide on a licensing scheme, that will mean that the code will be compiled to 1 or more dlls and that there will be a licensing system on the master application.
So, as I embarked on my development mission to achieve the basic requirements above I found myself writing a solution that did what the Web Client Software Factory does, thus reinventing the wheel and wasting my time. After all, WCSF was written by the Microsoft Patterns and Practices team for us to use, and they kindly supply the entire code with a lenient licence. And it solves 70% of my problems. So, back to the drawing board it is, this time with the WCSF and having to learn IoC, TDD and more.
Project Banana 3.5.2 here I come, as for the version number well, nevermind.