A disciplined approach to object-oriented software design
Generate hierarchical design from method/data collaboration
The OOAD navigation problem:
Objects are identified and behavior (methods) is assigned to these objects (classes) based on the perceived ownership.
The dependencies needed by methods may create a navigation problem for the class which is not easy to satisfy.
The navigation solution provided may not have ease of memory/object management, parallelization, service orientation, refactoring.
Change in dependencies during refactoring, are not properly accommodated. The design is more or less fixed and is often entangled.
Method code is often written independent of execution path, tend to be more general than specific.
Design process:
- Obtain the method/data dependencies as a result of requirements analysis.
- Define data model data-types with no behavior.
- Collect methods and data with same dependency in class.
- Build the process model by organizing the classes in a natural navigation tree
- Classes may be further refined on the basis of related functionality
Features:
- Design based on method/data dependencies obtained through structured analysis of use cases
- Separate process model and data model. Process model has access to data model.
- Relocatable hierarchical design. Method code is object and design transparent. Method code is source repository.
- Constructor dependency injection is transparent, discoverable and thread safe.
- Code management based on platforms and business targets
- Common development method
- Code organization based on dependency and not on common/similar functionality.
- Related functionality having common dependency may further be encapsulated to promote service orientation.
- Short and refined development cycles.
- Each change generates a design and respective framework code, keeping the code and design quality pristine.
- Documented design
Benefits:
- Architectural flexibility.
- Methodical memory management.
- Methodical application of aspects like concurrency, memory intensiveness, service orientation, etc
- Minimal discovery time
- Controlled performance
- Agile and responsive development
- Ease of test case environments.