Negotiating Aggregator
Negotiating Aggregator
Negotiating Aggregator
1
This can be invaluable when dealing with many subscribers who might have
quite different update cycles. It is simply saying that the old versions are still
supported, so everyone does not need to upgrade at the same time. It is not
unheard of to even have hundreds of subscribers. Having any change to the
aggregator require changes to every single client will not turn out well, instead
you deprecate versions over time.
When using a Negotiating Aggregator one thing to consider quite explicitly is
“how long are we going to support this?”. What are the release cycles of other
things that integrate with you? You want to get the transformations out as soon
as is “reasonable”. Try to be quite explicit with others about how long you will
support them.
In terms of removing old versions I have found that using an attribute /annotation
on them does a good job of this. You can then have something in your continuous
integration looking for it.
[Expires("01-01-2024")]
class FoodCookedv2_converter {
}
Fun note about C# as passing the string looks a bit odd, you need
to use a string here not a DateTime as you might expect as the time
of writing you cannot pass the a DateTime into an attribute. Instead
it will paarse the string in the attribute itself.
You can even be nicer and go one step further looking at the content type
and returning a “happy little reminder” to the client that the version they are
currently using will expire soon or even better “on this date”. If nothing else
they won’t be able to say that you did not warn them that this might happen
when it actually does. Do note: this will happen when dealing with many clients,
it is not a matter of if, it is when . . .