Our travel industry client, operating across three continents and several countries, wants to standardize the process of choosing travel packages, air routes, hotels, and hundreds of other travel options. Today, local travel agencies decide themselves what they want to offer or not. The idea is to let them make decisions still, but with some constraints coming from global marketing.
Technically speaking, we need the following:
- Three level of players -
- The process starts with
Global, who will define which products the whole enterprise can work with.
- After definition by
Continentwill be able to refine it, but always inside the boundaries defined by
- After refinement by
Continent, the same will apply for
Country. They can refine even more what was defined by
Continent, but again inside the boundaries coming from
- The system must then be able to support hundreds of definitions made by
Global- one definition per attribute (air travel, hotel, ship, etc.). For each definition made by
Global, we can have up to three definitions made by
Continent(one per continent) that are derived from
Globaland inside each continent (up to
ndefinitions made by the
ncountries from that continent).
Globaledits an already existing definition, it must be communicated to continents and countries. That means dozens of definitions need to be notified and changed. And this is where I am stuck.
A simple example to visualize the business requirements:
Globaldefines that hotel A, B, C, and D are available.
Continentthen says that they want to work only with A, B, and C because D has a bad reputation inside the continent.
Countrythen says that they want to narrow down the list more, they are willing to work only with A and B, because C does not follow the religious rules of the country.
In this very simple case, we need to hold three definitions for the same domain (one for
Global, one for
Continent, and finally one for
What is the best way to communicate to local users that a change has been made by
Assumption: I will create only one service to handle this requirement.
I was considering using queues, however the service will then be both producer and consumer, which seems a bit odd to me. Has anyone faced a similar challenge and found a satisfactory solution?