Why a Domain Model?
Limitations of RAD
Advantages of Domain Modeling
Tradeoffs
Limitations of RAD
RAD suffers from the "strenghts of its weaknesses" syndrome:
the very features which make it easy to throw together a workable application
(auto-generated component noise names, all application logic as form-level
methods, etc.), also work to impede the scalability and maintainability
of the application, and its fidelity to the domain model.
Scalability
Because code in a RAD'ed application is highly centralized (which makes
for "easy" initial development), reusing useful pieces of application
logic across multiple forms and applications can require "bend over
backwards" compromises in the originating form's design.
Maintainability
Adding new variations of behavior to these "monolithic" repositories
often requires making multiple changes to the form, thus creating numerous
opportunites for introducing bugs into the working code.
Fidelity to Application Domain Logic
As applications (and their functionality) grow, the effort required to
keep multiple forms and applications in synch with the often rapid changes
to the business logic which they support. This limitation heterodynes with
the first two, leading some to spell out RAD as "rapid application
death" -- it rapidly becomes cheaper to throw out the recently completed
version and code afresh, rather than attempt to maintain the deployed version.
Return
to top
Advantages of Domain Modeling
Partitioning
Domain object models come to the fore as applications grow beyond the scope
of the heroic model of programming we all know and love. They yield their
greatest benefits when they allow a system's designer to carve up the application
along natural lines. Such a a "divide and conquer" strategy provides
almost the only feasible approach to managing that complexity (as long
since noted by Fred Brooks in his seminal essay,
The Mythical Man Month).
Scalability
As applications grow in size and complexity, only Because they support
and utilize the inherent structure of the users work patterns, diivisions
which follow the "cleavage lines" of the problem domain give
the most leverage to the partitioning effort. Domain models allows the
design team to identify these "perforations" in the problem space,
maximizing the cohesiveness of the domain-centered modules of the system
while simultaneously reducing their coupling to unrelated parts.
Maintainability
Because unrelated portions of the system remain only loosely coupled when
the system is divided along domain-driven lines, the potential for introducing
new bugs during "minor;" maintenance is much reduced. Likewise,
constructing the application on the foundation provided by the domain model
allows for enhancements which work within, rather than against, the application's
structure.
Fidelity
What we once called "requirements creep" is fast becoming "requirements
blur," as users' expectations for the usefulness and usability of
software grows, seemingly without bound. The roadmap which a good domain
model provides gives the developer at least some hope of keeping up with
these demands, and even of anticipating them.
Return
to top
Tradeoffs
While the effort to build a domain object model is certainly not insiginificant,
the payoffs can be enormous. Everyone can relate stories about "quick
fix" projects which mushroomed into maintenance nightmares. Planning
for growth gives a project at least a reasonable chance of coming out on
top of the software entropy curve.
Return
to top
TOC
| Next
Copyright 1997, Palladion
Software.
Please report any problems with this page to Tres
Seaver, tseaver@palladion.com.