Design First, Code Later?
So now that I covered WHY I am writing the PhotoLion application it is time for a post about HOW I plan on writing the application.
The first I did was NOT TO START WRITING the application. I started taking some notes (mental and also in OneNote) on how I would want it to work. I am still up in the air about the interface for the main host application.
You may notice I said "host application", that is because during my design I determmined I would write it using an extensible plugin style. I want it this way so that I can write the inital application and a main plugin or two and get to using it. Then as I find more time I can add more functionality in new plugins, and can distribute them easily.
I came to the decision to use plugins due to several factors:
- I wanted to get the inital parts done as I really need the application written so I can use it to get my pictures organized
- I have several things I want it to do and they may not always be done on each picture so really needed flexibility
- I know that I don't know everything, so I wanted to be able to add new functionality at a later point
- I wanted to extend my skillset and learn new programming techniques and plugin arcitechure like this is something I have not done before
I have written COM components and such, as well as ActiveX controls, so this is not something completely unknown to me. I also implemented a Plugin for RSSBandit to handle podcasts, when I first got interested in Podcasts, but dropped work on that because :
- I found Doppler, and quickly donated some money for it even though it is free because it is a great application.
- RSSBandit is going to implement support for enclosures inside the application.
So after deciding on the fact I wanted it to be plugin based it was an easy decisiong to write it in .NET (which language is still up in the air). I used VB.net for the PodcastLion Plugin for RSSBandit although I had to convert the plugin's interface file from C# to VB.net so I could understand it as I am a VB programmer, and that was my first foray into .NET
Now that I have been doing some more .NET development at my current position I am getting more comfortable using .NET and really can use both C# and VB.NET equally (of course that is still not at the same lavel as I can do coding in VB6) so I am still unsure what language I plan on using. I am leaning towards C# for the Plugin Interface, so that I can use the XML Commenting support in C# (next version of VB.NET will support this better from what I have read) and then probably use VB.NET for the interface part of the application.
Since the general design is pretty set and coding environment is decided on, I am getting close to be able to start writing some code. I am planning on this processing beingiterative and having to do more design after I get into the coding and find any design points and issues I missed initially or went the wrong direction.