Join us on:

T18. Agile Architecture via Modularity Patterns

Kirk Knoernschild, Burton Group

I have more than 15 years of enterprise software development experience on projects ranging in size from 3 to over 100 developers. I've trained thousands of software developers on object oriented design and agile development practices, and have presented at numerous national and regional conferences. In 2002, I wrote the book "Java Design: Objects, UML, and Process", published by Addison-Wesley. I am the creator of JarAnalyzer, an open source utility that analyzes JAR files. Today, I'm an Analyst with Burton Group in the Application Platform Strategies area.

Software architecture is organic. The architectural goals you set to achieve early in the development effort differ from those you'll need to satisfy later. Change occurring throughout the software development lifecycle impacts architecture. The ability to accommodate shifts in architecture is directly related to the dependencies between software modules. In this session, we examine patterns that lead to agile architecture. Extensive discussion is devoted to modularizing units of deployment, and how code can be created and organized to create more flexible, reusable, maintainable, extensible, and testable software components. Topics of discussion range from coupling between classes to the dependency structure between your modules of deployment. Examples gleaned from real world Java EE development effort will be used in a pragmatic case study that examines the evolution of a system from its initial deployment through a number of refactorings that positively influenced the architectural resiliency of the final product. Patterns will be introduced that allow you to apply many of these concepts immediately, and help you modularize large software systems.


Define and understand a software module How to prevent design and architecture rot through insulation Architect the joints of a system Managing dependencies between modules Modularity patterns

  1. Introduction (15 minutes) Define software architecture and modularity Topics Include: * Architecture as a structural entity * Importance of modularity * A simple example
  2. Logical versus Physical Design (25 minutes) Goal: Explore the differences between logical and physical design. Examine how logical design influences physical design and vice versa. Topics Include: * Logical Design: Maintenance and Extensibility * Physical Design: Modularity and Reuse * Physical Units of Deployment * Module Relationships * Direct versus Indirect Relationships * Transitive Relationships
  3. The Patterns (50 minutes) Examine a system's initial architecture and explore through numerous pattern refactorings how the architecture is modified. A suite of patterns will be presented as each example is built on the previous, offering an experience very much like one would experience on a real world project. Topics Include: * Layering Modules * Concrete versus Abstract Components * Leveling Relationships * Separating Abstractions * Inverting Component Relationships
Audience: Practitioners, Educators
Please email any questions to . This e-mail address is being protected from spambots. You need JavaScript enabled to view it