DSLR Camera Software
High-Level Design
Attempting to design a top-level architecture for a Digital Single Lens Reflex camera is a sizeable task. In reviewing the use cases and requirements from section 1 of this document, we as designers felt a bit overwhelmed and were questioning as to whether or not we had chosen a project that was constrained enough to serve as a learning exercise. As we were struggling to find an architectural style or pattern that was applicable across the full problem domain, we decided that decomposing our problem into smaller, more manageable sub-problems might help us find a good architectural fit. In doing so, we discovered that when you examine a DSLR camera, the functional and nonfunctional requirements naturally fall into one of two categories.
The first category is for items in the problem domain that concern themselves with the physical operation of the components of the camera. Taking a picture with a DSLR camera in automatic mode requires the system to interface with a light sensor and then control the physical manipulation of an aperture, a shutter, a flash, and a lens. See the traceability matrix for the requirements falling into this category.
The second category consists of the aspects from the problem domain that deal with the still images captured by the operation of the camera. Here, we are concerned with converting light waves that are focused on the image sensor to an image that can be persisted to physical storage. We are also concerned with being able to apply basic edits to still images. See the traceability matrix for the requirements falling into this category.
By breaking our problem down into the two categories above, we determined that it is not feasible for one architectural style to guide the design for the full problem domain. Instead, we are required to synthesize a complete architectural design by combining two or more architectural styles. The high-level module view of our overall design is shown in Figure 4 below.
We will break the software system that implements these two categories of requirements for a DSLR camera into three modules. Each module encapsulates, or is responsible for, one aspect of the system. The first module will be responsible for adjusting the physical elements of the camera, the aperture, lens, flash, and triggering the shutter. The second module will take care of persisting and retrieving the digital image to and from physical storage. The third module will control the invocation of the first two modules (Figure 4).
(Figure 4) Module Overview of a DSLR camera system