Design Patterns in Smalltalk MVC
Design Patterns in Smalltalk MVC
Smalltalk MVC
Design Patterns in Smalltalk
MVC
The Model/View/Controller (MVC) triad of
classes is used to build user interfaces in
Smalltalk-80.
Design patterns inside MVC should help
you see what we mean by the term
"pattern.”
MVC consists of three kinds of objects
The Model is the application object
The View is its screen presentation,
The Controller defines the way the user
interface reacts to user input
MVC decouples views and models by
establishing a subscribe/notify protocol
between them.
A view must ensure that its appearance
reflects the state of the model.
Whenever the model's data changes, the
model notifies views that depend on it.
In response, each view gets an opportunity to
update itself.
You can also create new views for a model
without rewriting it.
Diagram of a model and three
views
The diagram shows a model and three views.
The model contains some data values, and
the views defining a spreadsheet, histogram,
and pie chart display these data in various
ways.
The model communicates with its views
when its values change, and the view
communicate with the model to access these
values.
This example reflects a design that
decouples views from models.
The design is applicable to a more general
problem: decoupling objects so that changes
to one can affect any number of others
without requiring the changed object to know
details of the others
This more general design is described by the
Observer (page 326) design pattern.
Another feature of MVC is that views can be
nested.
MVC supports nested views with the
Composite View class, a subclass of View.
CompositeView objects act just like View
objects;
a composite view can be used wherever a
view can be used, but it also contains and
manages nested views.
The View-Controller relationship is an
example of the Strategy design pattern.
A Strategy is an object that represents an
algorithm.
It's useful when you want to replace the
algorithm either statically or dynamically,
when you have a lot of variants of the
algorithm, or when the algorithm has complex
data structures that you want to encapsulate.
MVC uses other design patterns, such as
Factory Method (121) to specify the default
controller class for a view and Decorator
(196) to add scrolling to a view.
Describing Design
Patterns
How do we describe design
patterns?
Graphical notations, while important and
useful, aren't sufficient.
They simply capture the end product of the
design process as relationships between
classes and objects.
To reuse the design, we must also record the
decisions, alternatives, and trade-offs that led
to it.
We describe design patterns using a
consistent format
Each pattern is divided into sections
according to the following template.
The template lends a uniform structure to the
information, making design patterns easier to
learn, compare and use.
Pattern Name and Classification
The pattern's name conveys the essence of
the pattern succinctly.
A good name is vital, because it will become
part of your design vocabulary.
The pattern's classification reflects the
scheme
Intent
A short statement that answers the following
questions:
What does the design pattern do?
Motivation
A scenario that illustrates a design problem and
how the class and object structures in the
pattern solve the problem.
The scenario will help you understand the more
abstract description of the pattern that follows.
Applicability
What are the situations in which the design
pattern can be applied?
What are examples of poor designs that the
pattern can address?
How can you recognize these situations?
Structure
A graphical representation of the classes in
the pattern using a notation based on the
Object Modeling Technique (OMT) [RBP+91].
We also use interaction diagrams [JCJO92,
Boo94] to illustrate sequences of requests and
collaborations between objects.
Appendix B describes these notations in
detail.
Participants
The classes and/or objects participating in
the design pattern and their responsibilities.
Collaborations
How the participants collaborate to carry out
their responsibilities.
Consequences
How does the pattern support its objectives?