INFO 290-1
View Source: Design Patterns in the Wild
Spring 2008
We will study a variety of design patterns, ranging from the classic "Gang of Four" patterns to patterns for distributed computing. Rather than looking at patterns in isolation, we will examine their application in a variety of open source software projects, to get a sense of how design patterns are applied in real design problems.
Faculty Sponsor:
Instructor:
Time:
Location:
Grading:
Mailing List:
John Chuang
Ashwin J. Mathew
Wednesdays, 6-7pm
205 South Hall
1 credit, Satisfactory/Unsatisfactory
design-patterns at ischool
Schedule
Course Introduction
23rd January 2008
Introduction to course, administrivia, overview of patterns and typologies and review of object-oriented programming principles.
No readings
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.
Readings
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.
Readings
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.
Readings
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.
Readings
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.
Readings