Provide implementation for a componentized Model View Controller framework aiming to provide a consistent high level architecture for thin client UI applications e.g. Swing-based. Many Swing-based UI applications are created with adhoc architectures that do not scale well over time with respect to adding more use-cases. The idea is to provide a high level MVC that will be context free and built on top of the following Design Patterns: Observer, Command, State and Chain Of Responsibility patterns. The implementation of the MVC pattern will emphasize on IoC friendliness. Optionally provide a new Maven artifact for generating new Swing UI bare bones based on this architecture.
The top abstractions of this generic MVC are: IModel, IController, IView. They generically expose interfaces that will be wired together automatically i.e. use-case based. The interfaces exposed by each of these top level abstractions are explained below.
IModel interface:
- exposes ISubject (Observer) interfaces: Notifies about changes in the model will be automatically wired to the IView's IObserver
- exposes fine grained Model State to be accessed and changed by Controller implementations
IController interface:
- exposes IObserver (Observer) interfaces: Receives notification about user gestures from the IView and triggers execution of Commands
- exposes ICommand (Command) interfaces: Trigger the execution of Commands
IView interface:
- exposes IObserver (Observer) interfaces: Handles notifications about changes in the model.
- exposes ISubject (Observer) interfaces: Notifies user gestures.
- exposes IInvoker (Command) interfaces: Directly triggers the execution of a Command
There will be an initial entity that will scan the concrete implementation of these top level interfaces and do the wiring e.g.
IView's IInvokers with IController's ICommands
IModel's ISubjects with IView's IObservers
IView's ISubject with IController's IObservers