Designing Architectural Reflection

An application built of software is static and does the same thing every time it executes. Sometimes, however, you want to be able to reconfigure the application easily and to make it adaptable. Here's what I mean by an adaptable application:

  • An application to which you can add new capabilities without rewriting or extensively changing the whole application
  • An application that can evolve to meet new technologies and new customer needs so that you can incorporate the latest ideas and customer requirements into the application easily, without throwing out the whole application and starting over

Making applications adaptable

Changing and evolving software is a tedious, error-prone endeavor. It's also expensive, because the developers who are handling the evolution must spend lots of time understanding the software's current behavior before they can change it.

The internal structure of applications that adapt easily to change is very complex. Maintaining these applications is difficult because of the many components used to encapsulate changes. Providing additional ways to perform adaptations and growth also increases complexity. Modern programming languages provide many built-in ways to adapt and grow software, such as mix-ins, subclasses, templates, and parameterization. You also resort to good old-fashioned cut-and-paste reuse and adaptation — in other words, copy parts of code from one place and alter it for its new functionality.

Adapting ...

Get Pattern-Oriented Software Architecture For Dummies now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.