views:

251

answers:

2

What is the point of IHandleMessages<T> vs IMessageHandler<T> in NServiceBus 2.0?

One interface derives from the other and does not appear to add any new methods or new constraints on T. It is possible that one is a marker interface but there is no evidence for this in the comments.

A: 

From the naming of the interfaces, I would say IMessageHandler<T> would be used to implement a handler for a single message.

IHandleMessages<T> would be used to handle a number of messages (possibly delegating each to an instance of IMessageHandler<T>.

Oded
+4  A: 

The reason is that it follows the newer naming convention for interfaces in NServiceBus, where the name states explicitly what it does: IHandleMessages, IPersistSagas, IContainSagaData, etc. The letter 'i' at the beginning is the interface speaking of itself.

When taken together, these result in more readable code bases, if only slightly, but bring the language of the framework closer to that of the developer, thus decreasing the learning curve and friction of usage.

Udi Dahan
I don't exactly agree it decreases the learning curve. If anything, adds to complexity and confusion; hence, the very reason why Thomas is asking. I was in the very same situation. It took more time with Reflector and analysis to figure out what you were doing with both interfaces.
Brian Chavez
Thanks Udi, much appreciated! :)
Thomas Bratt
I understand, but I couldn't go and change the interface name without breaking compatibility with all existing code.
Udi Dahan
Udi, Maybe you should mark IMessageHandler<T> with ObsoleteAttribute :)
John Simons