Now that I'm about to start developing the front end, as well as potential features, let's talk a little about the "ingredients" that I'm going to need.
In this post I'm going to talk about the development and integration platforms (.Net 3.5 and Hudson respectively), a little about development methodology, the tools I'll be using for testing (NUnit, Rhino Mocks / Moq), and a few other bits and pieces (Log4Net, NAnt, Fluent NHibernate, Subsonic, etc)
The front-end and will be developed using the .Net 3.5 platform, programmed in C#. Although it can limit the hosting environment, .Net 3.5 gives us a few things that now are pretty indispensable, for example Linq, object initialisers and lots of Lambda goodness that some of the other tools I intend to use will require.
Test Driven Development with NUnit, NCover and Moq / Rhino Mocks
I intend to use a semi test driven development methodology, using NUnit as my test framework, and NCover integrated into a continuous-integration environment to ensure test coverage.
So that the different parts of the application can be tested in isolation, I will be using Moq or Rhino Mocks to inject test objects into my application. At the moment Rhino Mocks is my framework of choice, but I'm hearing too many good things about Moq to ignore it. I'm also still undecided whether to throw a dependency-injection framework into all of this, but at present I'm planning to use constructor-based injection for most things.
Subversion Revision Control
At present I'm using Subversion on a local server, but once the site is functional and at least as a capable as some of the existing FHEM front ends, I intend to move to an online platform such as Google Code.
NAnt Build Scripts and Hudson Continuous Integration
Application build scripts will be written using NAnt, these scripts will be used to build, test and deploy the application. Hudson continuous integration will be used to build the application using these scripts automatically in response to a code check-in, and to ensure that all tests still pass.
Sqlite Database and Fluent NHibernate / Subsonic ORM
Initially I intend to use SQ light as my and database back end, couple with an object-relational-mapper such as Fluent NHibernate or Subsonic. The use of a separate data-access layer and mock-driven unit tests should ensure that if necessary, the database back end can easily by switched to MySql, SQL Server, XML, etc.
Event Logging and Exception Handling with Log4Net
Event logging and exception alerting will be handled using Log4Net. Log4Net has some superb configuration features available, for example to configure rolling log files, and is able to send out certain types of log events as emails.
So that's that - for the initial build phase, I'll try to post regular blog articles to give updates, but for now I'd best get on with it!