Skip to main content

Act 1; Scene 1

As previously mentioned I want to write about my "Business Agility through Component Software" concept. This encompasses several aspects of software design and crucially includes operational considerations.

I'll be writing a series of posts covering all of this...however in true "reuse" style I want to provide a common "set the scene" post to explain the work I have been doing and give context and background to the actual post that will reference it.

I work for a Digital Media "supply chain" company. We ingest (take delivery) of media files (WMA,WMV, metadata & images) and perform a number of processing steps on them before eventual delivery to a consumer via a digital retail front end (website, WMP Online Store, gadget etc). This past twelve months I've been involved in re-developing the delivery services on our core retailer platform.

These services are used to...
  • Deliver a media file (WMA, WMV) to a PC/Client
  • Generate Windows Media Licences (rental, perpetual, subscription/chained)
  • Manipulate (resize, crop, watermark etc) and deliver product images
  • Subscription management (create, authorise, etc)
  • Licence management (counts, reset etc)
  • Product delivery manifest (download, licence, image urls, description etc)
This is all based on Microsoft .NET 2.0 using C# with a smattering of C++ for custom COM components running on a client PC. My expertise is in the .Net code however I'm learning the COM stuff as it seems to crop up a lot in media development and a worthy area of knowledge. These services are all accessed via ASP.Net endpoints as either Web Services or custom Http Handlers.


All of these services are very much typical "service icebergs"...the endpoint interface is 1/9th of the implementation. Typically a service (http handler) has three or four parameters or a web service a simple object parameter with a handful of properties. Data returned is similarly pretty slim too.


The service endpoints are deployed per retailer - that is each retailer has a dedicated copy of the services; some of the services are redundant depending upon the retailer and their business model.


Overhaul...
Luckily a portion of the services were re-writes and I could learn from the mistakes made in the previous incarnation. These improvements were also incorporated into the approach/pattern/template for any new services created.


Ideas and objectives I wanted to incorporate included,
  • Decoupling service endpoints from service implementation
  • Service implementation must use dependency injection (DI) and Inversion of Control (IoC)
  • Pluggable component architecture to allow customisation for retailer specific processing (using DI/IoC)
  • Services must be able to provide a verbose, readable audit trail
  • Use interface/behaviour driven design for components
  • Understand what makes a useful design document, what level and type of information is actually useful committing to a document?
  • Remove focus from data/database during design
  • Utilise mock objects to provide known behaviour and improve development pace
The result of all this was about 50,000 lines of pure code. Most if not all of the objectives were achieved - most with a successful result.

The following posts/articles I will write will cover these topic areas - some at a conceptual level, some at a technical level or combination. My objective with these articles is to evangalise about these ideas and objectives and for you to embrace them in your projects to increase business agility and software quality.

I hope you stick with it!

Comments

Popular posts from this blog

Configuration in .Net 2.0

11-Dec-2007 Update I've updated this post to fix the broken images and replaced them with inline text for the example xml and accompanying C# code. This post has been by far the most hit on this blog and along with the comments about the missing images I thought it was time to update it! Whilst recreating the examples below I zipped up the working source code and xml file and loaded this onto my Project Distributor site - please download it to get a full working custom configuration to play with! Just click on the CustomConfigExampleSource link on the right hand side, then the "Source" link to get the zip. We are in the process of converting our codebase to .Net 2.0. We've used Enterprise Library to great effect so decided that we should continue with this in the form of the Jan 2006 release which targets 2.0 and I've got the job of porting our Logging, Data Access etc wrappers to EntLib 2.0. ...And so far so good - the EntLib docs aren't bad and the migrati...

Walk-Thru: Using Wolfpack to automatically deploy and smoke test your system

First, some history... The advent of NuGet has revolutionised many many aspects of the .Net ecosystem; MyGet, Chocolatey & OctopusDeploy to name a few solutions building upon its success bring even more features to the table. I also spotted that NuGet could solve a problem I was having with my OSS System Monitoring software Wolfpack ; essentially this is a core application framework that uses plugins for extension ( Wolfpack Contrib ) but how to unify, standardise and streamline how these plugins are made available? NuGet to the rescue again - I wrapped the NuGet infrastructure (I deem NuGet to be so ubiquitous and stable that is has transcended into the software "infrastrucuture" hall of fame) with a new OSS project called Sidewinder . Sidewinder allows me to wrap all my little extension and plugins in NuGet packages and deploy them directly from the Wolfpack application - it even allows me to issue a new version of Wolfpack and have Wolfpack update itself, sweet huh...

Announcing FluentGeoApi - a C# wrapper to GeoAPI.com

I'm pleased to make public the fruits of my late nights.... FluentGeoApi ! I previously mentioned that I am working on a private/personal project - well it's got an element of geolocation to it and after a bit of internet research I found GeoAPI.com . In order to interact with GeoAPI I decided to write a fluent style wrapper over the top of it and I've just released v1.0.0.0, a .Net 3.5 C# library to take the pain out of making REST calls and dealing with the GeoJson wire format used by GeoAPI. It's not 100% coverage of the API but I plan on getting there ASAP...however I've implemented Create/Modify/Delete a user entity, Simple and Keyword Search which is enough to release it. If you are working with geolocation data/features in your .Net application I would check out GeoAPI.com - I've been really impressed with what if offers (and if you hit the api < 20,000 times a day it won't cost you a penny!) - hopefully you'll also consider using FluentGe...