*This course will be conducted remotely and will be online only for Spring 2021*
This course gives hands-on experience in architecture and design and the communication of such designs in the form of patterns. There are no formal prerequisites except solid familiarity with Java and optionally familiarity with C++.
The course is designed to give students a fundamental introduction to design and architectural patterns as they are implemented in large scale system architectures currently used in industry. Students will be encouraged to explore the various implementation possibilities afforded by these patterns. Trade-offs in terms of performance, development time, maintenance impact, etc. will also be discussed. Students will gain exposure to several industry-leading tools including Apache ActiveMQ and ServiceMix.
Specific Learning Objectives include:
A. Recognize and define design and architectural patterns in current common industry use
B. Create code implementations of these patterns
C. Be able to discuss implementation trade-offs of certain patterns with respect to others
D. Provide exposure to several industry-standard pattern implementations
E. Understand and be able to implement common code refactorings
This course has two different foci: design patterns and architectural patterns.
After a brief review of the fundamentals of object orientation, including inheritance and polymorphism, the first focus on design patterns concentrates on several different design patterns or styles, including model-view-controller, factories, template methods, adapters, visitor, iterator, singleton, composite, etc. Historical anticedents of patterns will be reviewed in order to give students a fundamental context in such concepts. Students will work on labs that will give them an opportunity to build software (in Java and optionally C++) that implement these various patterns.
The second focus is on a selected architectural pattern metaphor, and this year's focus will be on Enterprise Integration Patterns. Patterns to be covered include Pipes and Filters, Message Queues, Message Broker, Message Bus, Message Channel, Message Router, among others. Concepts in Canonical Data Models will also be covered. Fundamentals including Pub/Sub and Point-to-Point models are covered including message routing, translation, filtering. Apache ActiveMQ and ServiceMix ESB will form the basis for the implementations.
Labs will be designed to reinforce lectures and to help students implement each pattern covered. Students will be able to choose which language (Java or C++) in which they wish to work for a given design patterns. All students will work in Java for Integration Pattern implementatons as Java is assumed by ActiveMQ and ServiceMix.
There will be 6 laboratory assignments, one every week for the weeks 3 through 8. (the last 3 weeks will be devoted to the course project deliverable):
Lab1: Introductory Design Pattern Implementations (Week 3)
Lab2: Intermediate Design Pattern Implementations (Week 4)
Lab3: Advanced Design Pattern Implementations (Week 5)
Lab4: Introduction to Messaging & ActiveMQ/ServiceMQ Environment Setup (Week 6)
Lab5: Fundamental Messaging Pattern Implementations (Week 7)
Lab6: Advanced Messaging Pattern Implementations (Week 8)
There will be a final exam covering the major topics of the course presented in lectures, talks, and reading.
Students will work on a course project. Each student will develop in code a system based on messaging and selected design patterns.
Design Patterns, Gamma, et. al., Addison Wesley, 1995, ISBN: 0201633612
Object Oriented Analysis and Design, 3rd Ed., Grady Booch, Addison Wesley, 2007, ISBN: 020189551X
Enterprise Integration Patterns, Hohpe & Woolf, Addison Wesley, 2004, ISBN: 0321200683