Remote-controlled fast car © Kevlin Henney
Separating the user interface from an application's core functionality enables its deployment across a network. This decoupling also allows independent modification of, and access to, the user interface and the application's core functionality. But how do you separate these two concerns effectively in practice? The eight patterns in this chapter address this topic, covering the areas of transforming user input into concrete service requests, converting the results of invocations into user output, and ensuring secure access to an application's functionality.
It is hard to transform user input into service requests to application functionality, execute these requests, and convert any results back into meaningful output for presentation to users. These aspects of application control are even harder if the application's user interface is separated from its functionality. This separation of concerns is often done to support decoupled evolution of user interface or application functionality, simplify changes in underlying software or hardware technologies, and enable distributed deployment on heterogeneous platforms.
The specific issues to consider when separating an application's user interface from its other functionality include:
Data structure decoupling. Separating user interface and application functionality implies ...