Martin Fowler's written recently about
Fluent Interfaces, which are basically class API's designed from the perspective of creating highly-legible, flowing code. I've been dallying a bit with this over the last year, eg:
TaskUtils.CopySettingsFrom(source).To(destination);
or
Assert(someString, new Contains("some substring"));
... having been inspired by the
NMock designers. There's even some examples in the .Net class library (eg: the
SqlParameterCollection's Add method returns the parameter just added).
I'd only just got round to thinking of it as
Currying (and prior to that,
Syntactic Sugar). Terminology explosion! Martin's example is a bit more complicated than mine, and the more complicated schemes
have their disadvantages, but it's always nice to see people going the extra mile to make their code usable. It adds polish, finesse.
A sharp tool[1] like
ReSharper, or VS2005 (C# only) can really make this kind of stuff a breeze - you just type
someobject.Add(thing).Substract(thing)
...and ReSharper will prompt you to create the appropriate Add and Subtract methods, with it's best guess as to the parameters you want. The result - clearer, more usable API's - is one of the reasons why the TDD guys have been advocating this approach all the time....
[1] As in Chapter 12, 'The Mythical Man Month', Frederick P. Brookes