Pages

Thursday 21 May 2009

Oi Microsoft, this IS part of Development!

I've hit a rather frustrating wall whilst implementing my Build Server for TFS 2008. As a company we have licenses for TFS 2008, VS2008 Development Edition and VS2008 Database Edition. Note the absence of VS2008 Test Edition (this is important!).

Our dev branch of source control is using a Continuous Integration model and builds the entire application on every checkin. Marvellous. However, I have been struggling to get the build to run (and report on) Code Coverage as part of the Unit Tests.

Turns out that you need to have VS2008 Test Edition installed on your build server. WTF!? Firstly, why should I need any client-side applications installed on my server for it to work (you need VS2008 Developer Edition to run Unit Tests as part of the build)? Secondly, why is Code Coverage considered part of the Test Edition? As a developer, a core part to producing good software is Unit Testing - which is worthless without a measure of Code Coverage!

Come on Microsoft. You've got to give us proper tools if you want us to continue developing for your platforms. Hopefully, life will change with VS2010?

Many thanks to Buck Hodges for responding to my emails and helping clarify the situation.

Session Availability in ASP.Net MVC

We are in the process of porting one of our Web Forms apps to ASP.Net MVC. This is just something we stumbled upon...

this.Session is null in a Controller's constructor.

Not a huge issue as you can use a Lazy Loading Pattern to circumvent it. It does raise the question of 'why?' though. The MVC (or Routing) framework is responsible for newing-up your Controllers to handle requests. Why couldn't Session be spun up prior to this?

Tuesday 5 May 2009

LINQ to SQL only goes so far.

I have just finished re-writing my ailing photography website. I have taken the opportunity to write it afresh using ASP.Net MVC and LINQ to SQL. Whilst the latter is hugely more sensible than programming against a database it did highlight a flaw quite early on.

'Entities' in LINQ to SQL (i.e. database tables / views) are connected to each other via Associations. These map 1-1 with the Relationships in your database. Unfortunately, you can't customise these objects thus denying the developer and means to filter entities. Example:

I have 2 main entities in my application: Albums and Photos. An Album can contain many Photos and a Photo must be part of one, and only one, Album. I then added an IsExcluded property to the Photo entity. Unfortunately, I can't set the Association between the 2 to recognise this filter.

Solution 1: Create a new View called 'IncludedPhotos' and use that in the domain model.
Solution 2: Move to LINQ to Entities.