ConcreteRequestHandler receives request from the client that is handled by its base class, AbstractRequestHandler.
The AbstractRequestHander invokes the RuleEngine with the screen identifier and all the data to be validated.
The RuleEngine requests the ConcreteRuleStore to provide a set of rules that have to be applied for the particular screen and the RuleSequence that defines the order in which the rules have to be applied.
The RuleEngine applies the rules to the data and returns the result back to the AbstractRequestHandler.
The AbstractRequestHandler sends different message to its ConcreteRequestHandler based on the results returned by the ConcreteRuleEngine.