C# FluentValidation – why we’re using it

A bit of background

I’ve been working in the C# world for a few months now. While the code is very similar to Java,the culture around open source could not be more different.  Where open source as business as usual in the Java & Javascript worlds, it’s very much exceptional circumstances only in the .Net one.  It took a bit of an extra push from myself to convince a client they should be looking at Fluent Validation for their validation needs, but I’m fairly certain (and more importantly they’re fairly certain) it was the right idea.

Fluent Validation

Fluent validation is an apache 2 licensed library that’s just moved from codeplex to github.  It enabled developers to code validation rules in a fluent manner and apply them to models.  In contrast to many modern validation approaches where the rules are declaratively mixed up with the models themselves using attributes (or annotations in Java parlance) fluent validation very firmly separates the models from the rules and has you define Validator classes instead.  Like this:

Simple!

The scenario

Their requirements are not exactly simple, but not particularly odd either.  They’ve got a large legacy code base that encapsulated a bunch of business logic, validation and data access.  They’re gradually migrating away from it because it’s slow and difficult to maintain, which is a pretty common scenario.  Due to the way the code base has evolved and the varying requirements they’re attempting to fulfill there are now four different ways into the database. To be clear, that’s four different implementations of their domain model and bindings to the underlying SQL schema.   Oh, and of course there are also custom validation rules coded by individual clients in various places and ways, not to mention that many of the rules for one entity depend on data from another. Currently, the default ‘always-apply’ rules are only in one place – the slow and inflexible legacy components.

The solution to all this is to extract the validation rules out of the legacy components and create a modern, fast and re-usable validation library that is data layer agnostic and can support configurable rule-sets.

Why Fluent Validation?

The main reason was flexibility.  We needed something that could attack such a wide variety of use cases it had to be able to validate anything in any context.  Fluent Validation fitted the bill

Other reasons included:

  • Speed of development – it’s really easy to work with.
  • Decoupled rules and models – meaning we could write multiple (and possibly conflicting, don’t ask) rule-sets against the same models.  In fact, enabling customers to write their own validators was pretty trivial exercise (see a future post on this)
  • Speed of execution – the rules are immutable objects meaning you can create them once and cache them.  When the rules are part of the model you’re needlessly setting them up every time.  This is not a problem when working with one simple entity, but quickly becomes a performance problem when you’re working with multiple complex validators over 50,000 rows. Benchmarking showed that we saved considerable time doing this – one import went from 12 minutes to 1 minute when we started caching validators.
  • Ability to work with odd relationships and dependent entities – many of the entities we work with have dependencies on other things in the system, even though they’re not ‘formally’ related.  With fluent validation we could write validators that handle this easily.

ORCiD Java Client now supports schema version 1.2!

Thanks to the hard work of Stephan Windmüller (@Stovocor) the ORCiD client library now supports version 1.2 of the ORCiD schema.  He’s also updated the companion ORCiD profile updater web app to use the new library.

Users have probably noticed that github have siliently dropped support for the way we were hosting the maven repository and we’re now looking to move it to Maven Central.  Not only is that  great news for anyone out there who was thinking of upgrading, it’s great news for the library’s future.

Goodbye to the British Library, hello corporate life.

I’ve moved on.  I had a great couple of years working at the library and met a ton of really enthusiastic folk.  The ODIN project came to an end and there was little left for me to do, so I’ve found myself a new workplace more local to home.

I’m a delivery engineer, apparently.  I’ve been here a couple of days and I’m still not sure what I’ll be delivering, but otherwise first impressions are very good.  I’m currently sat in a room full of graduates writing some sort of game and they seem to be enjoying themselves.  There’s a Waitrose round the corner meaning I get a couple of free coffees a day and soon I’ll be able to cycle to work.  Working from home has piled on the pounds so burning it off with cycle power would be fantastic.  It’s a corporate code shop, but seems agile and modern in it’s approach.  Time will tell, but all my kit is top notch and they support staff and HR have been great.

I’ll continue posting technical blog posts on whatever I’m working on as and when I encounter new stuff myself, which I think is going to be rather a lot in the coming months :)

eta: I’m now a Tech lead!

ETD2014 slides

I’m having a great time attending the ETD2014 conference.  There’s been lots of lively discussion around ORCiD and DOIs and it’s been fantastic to gather wider perspectives.  It’s also been great to get some coding in adapting the import tool to work with the Leicester institutional repository.

For those that are interested in the ORCiD integration I was discussing earlier, the live application can be found at http://ethos-orcid.appspot.com and the code at https://github.com/TomDemeranville/ I’ve popped the slides on figshare (http://dx.doi.org/10.6084/m9.figshare.1117858)

 

ELAG2014 – Slides

I recently presented at ELAG2014 about ORCiD integration.  I’ve embedded my slides below.  They might not make quite as much sense without context – they’re mainly pictures with single word topic headings, but they contain links to the source code etc.

I had a great time and met a lot of interesting folks whilst at ELAG.  I’m now in contact with two UK universities looking at ORCiD integration so I think it’s been useful.

I’ll add some commentary and a summary of the talk later this week.

Rather appropriately this is up on figshare – an open data repository that lets you upload anything then assigns it a DOI. This one has http://dx.doi.org/10.6084/m9.figshare.1057954

 

 

A different view of the British Library – photos

Once you get inside it, the British Library is a beautiful building.  I’ve taken to photographing it and its contents during my lunch break.  Here they are, click on them for the bigger versions.

Check out my flickr stream for more.