In all ways of structuring a GUI program, there is one vitally important issue -- separating the code which is the essence of the problem from the user interface. This logical part is variously referred to as the model, business logic, abstraction, or document. This code must not refer to the user interface directly -- it will interact with the user interface code by returning values or invoking listeners.
Motivation. There are two compelling reasons for this separation.