+ All Categories
Home > Software > Software design principles for evolving architectures

Software design principles for evolving architectures

Date post: 15-Apr-2017
Category:
Upload: firat-atagun
View: 7,962 times
Download: 3 times
Share this document with a friend
26
Software Design Principles for Evolving Architectures Firat Atagun
Transcript
Page 1: Software design principles for evolving architectures

Software Design Principles

for Evolving Architectures

Firat Atagun

Page 2: Software design principles for evolving architectures

Principles

Page 3: Software design principles for evolving architectures

DRY – Don’t repeat yourself.

Every knowledge in a system must have a single authoritative, unambiguous representation. – Pragmatic Programmers

Page 4: Software design principles for evolving architectures

YAGNI – You aren’t gonna need it.

Embrace principle of last responsible moment

Postpone decisions until you can’t postpone them any further.

Courage is postponing the decisions tomorrow to tomorrow. – Kent Beck.

Page 5: Software design principles for evolving architectures

KISS- Keep it simple and stupid

Simple keeps focus

Inherent & Accidental Complexity

Good software design hides inherent complexity and avoids accidental complexity.

Page 6: Software design principles for evolving architectures

Principle of Cohesion

High cohesion & Low Coupling

Removing and reducing coupling creates better design.

Page 7: Software design principles for evolving architectures

Avoid long methods

• Hard to test• Hard to reason• Hard to debug• Hard to change• Increases coupling, decreases cohesion

SLAP – Single level of abstraction principle and compose method pattern to the rescue.

Page 8: Software design principles for evolving architectures

Principle of least knowledge (Law of Demeter)

Consumer of a method or a class shouldn’t know the inner implementation details.

Page 9: Software design principles for evolving architectures

SOLID Principles

Single Responsibility Principles: A class or method should have only one reason to change.

Open-Closed Principle: A class should be open for extension but closed for modification.

Liskov Substitution Principle: Classes that implements the same interface or base class can be substituted.

Interface Segregation Principle: Interfaces should be specialized but not too special.

Dependency inversion (Inversion of control): Depend on abstractions not implementations.

Page 10: Software design principles for evolving architectures

Architecture

Page 11: Software design principles for evolving architectures

What is architecture?

Page 12: Software design principles for evolving architectures

Architecture is set of design decisions that are hard to change.

Shared understanding of a system between the people who are leading the project.

“Describe me with 4 objects how system works” – Kent Beck.

Page 13: Software design principles for evolving architectures

Avoid big up front design

Page 14: Software design principles for evolving architectures

Time

Understanding

Features based on Value and Architectural impacts

Page 15: Software design principles for evolving architectures

Reversibility

Last Responsible Moment

YAGNI

Minimize Framework and Libraries

Page 16: Software design principles for evolving architectures

Users/ External Quality

Software/ Internal Quality

Page 17: Software design principles for evolving architectures

Design Stamina

Page 18: Software design principles for evolving architectures

ArchitecturalPatterns

Page 19: Software design principles for evolving architectures

Presentation Layer

Business Layer

Service Layer

Persistence Layer

Closed

Closed

Open

Layered Architecture

Page 20: Software design principles for evolving architectures

Monolith

Page 21: Software design principles for evolving architectures

Feature based Slicing

F1 F2 F3 F4 .. FN

Cross cutting concerns

Page 22: Software design principles for evolving architectures

Microkernel Architecture

Core System

Plugin

Plugin

PluginPlugin

Page 23: Software design principles for evolving architectures

Event Driven Architecture

Event Processors

ESB, Queue, Hub

Mediator Topology

Page 24: Software design principles for evolving architectures

Event Driven Architecture

Event processors.

Broker Topology

Page 25: Software design principles for evolving architectures

Microservices Architecture

Page 26: Software design principles for evolving architectures

Layered Event Driven Microkernel MicroService

Agility

Deployment

Testability

Performance

Scalability

Development

Comparison


Recommended