- Visualize your system (from inside)
- Identify different (disparate) entities in your system
- Group objects which are inherently common (from functional aspect or in real world aspect)
- Identify inherent relation-ships in those entities: use tools such as is-a, has-a, uses, composition, aggregation, generalization, realization, cardinality
- Identify key data structures to model the entities
- Identify the interaction model between these entities to achieve the end goal of the system
- Identify tasks and ways you can break down your tasks.
- Identify task relationships
- Identify Workers or Threads and how and model their interaction
- Choose appropriate Thread Synchronizers in each situation (each has its way of defining a thread interaction mechanism)
- Identify business rules
- Identify actors in your system
- Identify and abstract common design patterns
- Stick to SOLID principles for Design (Highly cohesive and lowest coupling)
- Ask questions and gather constraints = which are the most essential limiting factors in shaping your system
- Visualize your system (from outside)
- Identify the above things using your system as one component and how it interacts or interfaces with its outside world
- Identify performance goals of your system (latency/throughput)
- Design for performance (scale-able - identify performance/scale-ability bottlenecks): liveness issues/memory leaks/resource leaks issues
- Don't over design
- Start small and let your design evolve
- Keep it flexible and simple (use the SOLID principles of design)
Wednesday, October 3, 2012
An approach to Software Design
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment