Design For maintainability Flashcards
Applying law of maintenance to design, 3 ideas
► Software industry laws: Second law of Lehman’s laws
Change->complexity->takes resources
► Idea 1: To create separate modules and with a good modularity
Well-defined
Conceptually simple
Independent upon partitioning
► low coupling
► high cohesion
With well-defined interfaces
►Idea 2: Via decisions ensuring encapsulation
► Idea 3: Pattern
Patterns in Software
► A pattern is a model proposed for imitation for solving a software design problem
► Used at different levels of abstraction of design problems
Architectural Patterns for entire systems
Design Patterns for collaborations between several classes
Data Structures and Algorithms
Defining Design Patterns
► A design pattern is a way of reusing abstract knowledge about a problem and its solution.
► A pattern is a description of the problem and the essence of its solution.
► It should be sufficiently abstract to be reused in different settings.
► Patterns often rely on object characteristics such as inheritance and
polymorphism.
Pattern Elements
► Name
A meaningful pattern identifier
► Problem description
► Solution description
Not a concrete design but a template for a design solution that can be
instantiated in different ways
► Consequences
The results and trade-offs of applying the pattern
What are the different architectural patterns
MVC,
events driven
shared data (blackboard, repository)
pipe-and-filter
layered
peer-to-peer
client-server
Defining Design Patterns
► Layered pattern
This pattern can be used to structure programs that can be decomposed into groups of subtasks, each of which is at a particular level of abstraction. Each layer provides services to the next higher layer.
The most commonly found 4 layers of a general information system are as follows:
*Presentation layer (also known as UI layer)
*Application layer (also known as service layer)
*Business logic layer (also known as domain layer)
*Data access layer (also known as persistence layer)
Usage
*General desktop applications.
*E commerce web applications.
I mean it looks like lego blocks, layer N at the top, Layer 0 at the bottom bruh
Client-server pattern
This pattern consists of two parties; a server and multiple clients. The server
component will provide services to multiple client components. Clients request
services from the server and the server provides relevant services to those
clients. Furthermore, the server continues to listen to client requests.
Usage
*Online applications such as email, document sharing and banking.
Defining Design Patterns
► Pipe-filter pattern
This pattern can be used to structure systems which produce and process a stream of data. Each processing step is enclosed within a filter component. Data to be processed is passed through pipes. These pipes can be used for buffering or for synchronization purposes.
Usage
*Compilers. The consecutive filters perform lexical analysis, parsing, semantic analysis, and code generation.
*Workflows in bioinformatics
Peer-to-peer pattern
In this pattern, individual components are known as peers. Peers may function both as a client, requesting services from other peers, and as a server, providing services to other peers. A peer may act as a client or as a server or as both, and it can change its role dynamically with time.
Usage
*File-sharing networks
*Cryptocurrency-based products such as Blockchain
Event pattern
This pattern primarily deals with events and has 4 major components; event
source, event listener, channel and event bus. Sources publish messages to
particular channels on an event bus. Listeners subscribe to particular channels.
Listeners are notified of messages that are published to a channel to which they
have subscribed before.
Usage
*Android development
*Notification services
Model-view-controller pattern
This pattern, also known as MVC pattern, divides an interactive application into
3 parts:
1.model — contains the core functionality and data
2.view — displays the information to the user (more than one view may be
defined)
3.controller — handles the input from the user
This is done to separate internal representations of information from the ways information is presented to, and accepted from, the user. It decouples components and allows efficient code reuse.
Usage
*Architecture for World Wide Web applications in major programming languages.
*Web framework
Blackboard pattern
This pattern is useful for problems for which no deterministic solution strategies
are known. The blackboard pattern consists of 3 main components:
*blackboard — a structured global memory containing objects from the solution space
*knowledge source — specialized modules with their own representation
*control component — selects, configures and executes modules.
All the components have access to the blackboard. Components may produce new data objects that are added to the blackboard. Components look for particular kinds of data on the blackboard, and may find these by pattern matching with the existing knowledge source.
Blackboard pattern
Usage
*Speech recognition
*Vehicle identification and tracking
*Sonar signals interpretation.
Broker pattern
This pattern is used to structure distributed systems with decoupled components.
These components can interact with each other by remote service invocations.
A broker component is responsible for the coordination of communication among components.
Servers publish their capabilities (services and characteristics) to a broker. Clients request a service from the broker, and the broker then redirects the client to a suitable service from its registry.
Usage
*Message broker software such as Apache
look at images
Mid-Level Design Patterns
Broker Design Patterns
Generator Design Patterns
Reactor