Design Pattern
- is a general solution to a common problem
- is more than just an implementation design, but also communicates intent and the problem being addressed
Design Patterns - Scopes
|
Scope |
Description |
Visual Scope |
|---|---|---|
|
deals with the behavior of a UI/presentation (closely related to Behavioral Design Patterns especially Mediator & Observer Pattern) |
| |
|
deals with designing APIs which are used to integrate services together (these APIs usually use existing Network-Level APIs) | ||
|
deals with designing and integrating multiple services together | ||
|
deals with designing and integrating a SINGLE service (micro or monolith) | ||
|
deals with software design (usually in the context between database and API endpoint) | ||
|
deals with designing schemas for databases |
Design Pattern - Scope Comparisons
Software Architecture vs Software Design
Software Architecture
Software Design
is more about the design of the entire system
emphasizes on module/component/class level
usually deals with what (is done) and where (it’s done), but never with how
completes the-how that architecture doesn’t (and shouldn’t) talk about
- provides a function description, the design provides enough detail to manufacture your widget
- defines:
- the blocks of your system
- the function of each block
- interfaces in enough detail to allow separate teams to implement those sections
- provides a development and management structure for the project and a framework in which to express your design requirements
- the architecture of a system is its ‘skeleton’. It’s the highest level of abstraction of a system. What kind of data storage is present, how do modules interact with each other, what recovery systems are in place? Just like design patterns, there are architectural patterns: MVC, 3-tier layered design, etc
- Architecture is the bigger picture: the choice of frameworks, languages, scope, goals, and high-level methodologies (Rational, waterfall, agile, etc.)
- the design describes the implementation of each part of the system
- Software design is about designing the individual modules/components. What are the responsibilities, functions, of module x? Of class Y? What can it do, and what not? What design patterns can be used?
- Design is the smaller picture: the plan for how the code will be organized; how the contracts between different parts of the system will look; the ongoing implementation of the project’s methodologies and goals. Specifications are written during this stage
System Architecture vs Software Architecture
- system is the broadest term and typically highest level, least detailed
- part of the system may be classified as software
- part of the software may be described using class diagrams
System Architecture
Software Architecture
- focuses on the entire system
- Concept of Operations, Major Data & Control Flows, Major Components (hardware, software, networking, etc.), interfaces.
- e.g. system architecture of an order entering system contains web front end, business layer service, and database
- focuses on the components
- like system architecture, but restricted to the software involved (e.g., databases, web servers, major software modules)
- for example, one component of the order entering the system is the web front end. It consists of Responsive User Interface, Model View Controller, Web Services, etc.
