Top Banner
Software Design Principles for Evolving Architectures Firat Atagun
26

Software design principles for evolving architectures

Apr 15, 2017

Download

Software

Firat Atagun
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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