Course Introduction
23rd January 2008
Introduction to course, administrivia, overview of patterns and typologies
and review of object-oriented programming principles.
GoF Patterns in Log4J
30th January 2008
Log4J is a widely used open source framework for logging.
We'll be looking at the Factory Method, Observer, Template Method, Facade and Mediator patterns.
Patterns in Apache Tomcat
6th February 2008
Apache Tomcat is an implementation of the Java Servlet and
Java Server Pages specifications, providing the means to write web applications in Java. We'll
be looking at the Intercepting Filter, Strategy, Command and Visitor patterns. In the context of
the Visitor pattern, we'll examine the Double Dispatch technique.
Patterns in Apache Struts + Code Clinic
13th February 2008
We'll be reviewing some of the patterns we've considered in prior classes based
on the Apache Struts web application framework, and studying some new ones -
the Model-View-Controller, Proxy and Singleton. We're also going to have our
first Code Clinic: Nick's going to run through a JavaScript library
he wrote, and look at patterns that emerged in his code, and possible extensions,
asking for our critical evaluation of the design choices he's made.
Patterns in AJAX Libraries
20th February 2008
We'll study the Prototype pattern, and how it's used as a first-class
concept in Javascript, and then make a start towards looking at distributed
programming patterns, with the Publish-Subscribe pattern, as used by the
Comet programming model for AJAX applications.
Map/Reduce
27th February 2008
We'll continue our discussions from last class with an examination
of Map/Reduce as implemented in YUI and Dojo, as well as the more
complex distributed implementation in Apache Hadoop.
Inversion of Control
12th March 2008
Inversion of Control (IoC) is a pattern commonly found in many software development frameworks.
We'll study IoC, and more specifically Dependency Injection, in the
PicoContainer IoC framework and the
Waffle web application framework, which uses PicoContainer.
Caching
19th March 2008
Data caching is critical to the performance of applications that
need to handle high loads. In this class, we'll examine a different
caching strategies and the mechanisms for plugging them into applications.
Source code will be drawn from
Hibernate,
an object-relational mapping library.
Spring Break
Persistence
2nd April 2008
Persisting data is central to almost any application. We'll examine different approaches
to persistence, how these translate to design patterns in applications' data access layer,
and consider the trade-offs inherent in each approach.
Thinking in Patterns
9th April 2008
We'll review many of the patterns we've discussed through the course,
and work through the processes of thinking about these patterns in
the construction of complex software architectures. The first reading,
"No Silver Bullet" is a classic that in many ways has stood the test
of time. Combined with the almost-poetic second reading, it helps us
place patterns in the art, rather than the science, of programming.
Roy Fielding invented the term "REST" in his doctoral dissertation,
the third reading. Chapter 1 is an overview of concepts in software
architecture, and chapter 5 dissects the HTTP protocol in architectural
terms; much of this lecture will draw from Fielding. The final reading
is optional, but strongly recommended; Richard Gabriel writes inspiringly of code.