+ All Categories
Home > Documents > SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich...

SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich...

Date post: 22-Sep-2020
Category:
Upload: others
View: 0 times
Download: 0 times
Share this document with a friend
82
SOFTWARE HYGIENE XPDAYS STUTTGART 2017
Transcript
Page 1: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

S O F T W A R E H Y G I E N E

X P D A Y S S T U T T G A R T 2 0 1 7

Page 2: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

oder was man von Blutgruppen über die Strukturierung von Software

lernen kann

Page 3: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

sven bange jens himmelreich

N E U L A N D - B Ü R O F Ü R I N F O R M A T I K

Page 4: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

ARCHITEKTUR

AGILE

Page 5: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

ARCHITEKTDER EINSAME

Page 6: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

Plan

Page 7: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

ARCHITEKT

Page 8: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

ARCHITEKT

Page 9: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

ARCHITEKTUR evolvierend, inkrementell

Page 10: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

Werte

Page 11: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

Muster

Page 12: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

Werte und Muster werden global kommuniziert und machen lokal handlungsfähig.

Page 13: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

Big Ball of Mud

Page 14: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

sauber einfach strukturiert aufgeräumt

willkürlich chaotisch wuchernd schmutzig

Page 15: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

1 8 4 8

Ignaz Semmelweis

Page 16: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

„Erkennung, Behandlung und Präventionvon Infektionskrankheiten“

H Y G I E N E

Page 17: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

„Erkennung, Behandlung und Präventionvon Infektionskrankheiten“

E R K E N N U N G

Page 18: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

Bedside-Test

A B 0

Page 19: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

A B AB0

Page 20: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

A B AB00 A B

AB

Spender

Empfänger

xxx

xxx x xx

Page 21: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

Serafol® ABO

Anti-A Anti-B

Page 22: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

Serafol® AB0

Anti-A Anti-B

Page 23: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

Serafol® AB0

Anti-A Anti-B

Page 24: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

Serafol® AB0

Anti-BAnti-A

Page 25: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

Big Ball of Mud

Page 26: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

Johannes Siedersleben sd&m

Q U A S A R

Page 27: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

„Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

David Parnas

Page 28: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

A B AB0

Page 29: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

A T AT0

Page 30: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

universell verfügbare Software

A T AT0

Page 31: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

Anwendungs-Software

A T AT0

Page 32: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

Technische Software

A T AT0

Page 33: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

Big Ball of Mud

A T AT0

Page 34: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

Repräsentation

A T AT/R0

Page 35: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

A T R0

Page 36: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

A T R00 A T R

Aufgerufener

Aufrufer

xxx

xxx x xx

Page 37: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

Quasar

Quasar® AT0

Anti-TAnti-A

Page 38: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

„Erkennung, Behandlung und Präventionvon Infektionskrankheiten“

H Y G I E N E

Page 39: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

„Erkennung, Behandlung und Präventionvon Infektionskrankheiten“

B E H A N D L U N G

Page 40: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

TREN ∙ NUNG

Page 41: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

Domain Driven Design

Eric Evans, Vaughn Vernon

Page 42: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

I. Bounded Context

A B C

Page 43: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

II. A-Software ∙ T-Software

Page 44: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

III. Domain Model

Page 45: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

Trennwand

Page 46: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

R-Software

Page 47: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

Hexagon

Page 48: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

Hexagon

Port and Adapter

Application

Domain

Page 49: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

Hexagon

WebController

AppService

Aggregate Repository

EntityValueObject

DomainServiceDomainEvent

RepositoryImpl

WebRequestPort and Adapter

Application

Domain

JDBCObject

Page 50: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

A-Software

WebController

AppService

Aggregate Repository

EntityValueObject

DomainServiceDomainEvent

RepositoryImpl

WebRequestPort and Adapter

Application

Domain

JDBCObject

Aggregate Repository

EntityValueObject

DomainServiceDomainEvent

Page 51: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

T-Software

WebController

AppService

Aggregate Repository

EntityValueObject

DomainServiceDomainEvent

RepositoryImpl

WebRequestPort and Adapter

Application

Domain

JDBCObject

WebRequest

JDBCObject

Page 52: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

R-Software

WebController

AppService

Aggregate Repository

EntityValueObject

DomainServiceDomainEvent

RepositoryImpl

WebRequestPort and Adapter

Application

Domain

JDBCObject

WebController

AppService

RepositoryImpl

Page 53: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

B E I S P I E L

Page 54: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

├── java │   └── de.neuland.xpdemo │   ├── XpdemoApplication.java │   ├── application │   │   ├── GreetingApplicationService.java │   │   └── GreetingData.java │   ├── domain.model │   │  ├── Greeting.java │   │ ├── GreetingInterest.java │   │ ├── GreetingRepository.java │   │ ├── Name.java │   │ └── Salutation.java │   └── port.adapter │   ├── persistence │   │   ├── GreetingTable.java │   │   ├── HibernateGreetingRepository.java │   │   └── JpaGreetingRepository.java │   └── web │   └── WebController.java └── resources ├── application.properties ├── static └── templates └── home.html

Page 55: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

├── java │   └── de.neuland.xpdemo │   ├── XpdemoApplication.java │   ├── application │   │   ├── GreetingApplicationService.java │   │   └── GreetingData.java │   ├── domain.model │   │  ├── Greeting.java │   │ ├── GreetingInterest.java │   │ ├── GreetingRepository.java │   │ ├── Name.java │   │ └── Salutation.java │   └── port.adapter │   ├── persistence │   │   ├── GreetingTable.java │   │   ├── HibernateGreetingRepository.java │   │   └── JpaGreetingRepository.java │   └── web │   └── WebController.java └── resources ├── application.properties ├── static └── templates └── home.html

Page 56: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

├── java │   └── de.neuland.xpdemo │   ├── XpdemoApplication.java │   ├── application │   │   ├── GreetingApplicationService.java │   │   └── GreetingData.java │   ├── domain.model │   │  ├── Greeting.java │   │ ├── GreetingInterest.java │   │ ├── GreetingRepository.java │   │ ├── Name.java │   │ └── Salutation.java │   └── port.adapter │   ├── persistence │   │   ├── GreetingTable.java │   │   ├── HibernateGreetingRepository.java │   │   └── JpaGreetingRepository.java │   └── web │   └── WebController.java └── resources ├── application.properties ├── static └── templates └── home.html

Page 57: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

├── java │   └── de.neuland.xpdemo │   ├── XpdemoApplication.java │   ├── application │   │   ├── GreetingApplicationService.java │   │   └── GreetingData.java │   ├── domain.model │   │  ├── Greeting.java │   │ ├── GreetingInterest.java │   │ ├── GreetingRepository.java │   │ ├── Name.java │   │ └── Salutation.java │   └── port.adapter │   ├── persistence │   │   ├── GreetingTable.java │   │   ├── HibernateGreetingRepository.java │   │   └── JpaGreetingRepository.java │   └── web │   └── WebController.java └── resources ├── application.properties ├── static └── templates └── home.html

Page 58: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

@Controller public class WebController {

@Autowired private GreetingApplicationService greetingApplicationService;

@RequestMapping("/") public String home(Model model) { GreetingData greeting = greetingApplicationService.welcomePeople(); model.addAttribute("salutation", greeting.getSalutation()); model.addAttribute("name", greeting.getName()); return "home"; }

}

Page 59: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

@Controller public class WebController {

@Autowired private GreetingApplicationService greetingApplicationService;

@RequestMapping("/") public String home(Model model) { GreetingData greeting = greetingApplicationService.welcomePeople(); model.addAttribute("salutation", greeting.getSalutation()); model.addAttribute("name", greeting.getName()); return "home"; }

}

Page 60: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

@Controller public class WebController {

@Autowired private GreetingApplicationService greetingApplicationService;

@RequestMapping("/") public String home(Model model) { GreetingData greeting = greetingApplicationService.welcomePeople(); model.addAttribute("salutation", greeting.getSalutation()); model.addAttribute("name", greeting.getName()); return "home"; }

}

Page 61: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

@Controller public class WebController {

@Autowired private GreetingApplicationService greetingApplicationService;

@RequestMapping("/") public String home(Model model) { GreetingData greeting = greetingApplicationService.welcomePeople(); model.addAttribute("salutation", greeting.getSalutation()); model.addAttribute("name", greeting.getName()); return "home"; }

}

Page 62: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

├── java │   └── de.neuland.xpdemo │   ├── XpdemoApplication.java │   ├── application │   │   ├── GreetingApplicationService.java │   │   └── GreetingData.java │   ├── domain.model │   │  ├── Greeting.java │   │ ├── GreetingInterest.java │   │ ├── GreetingRepository.java │   │ ├── Name.java │   │ └── Salutation.java │   └── port.adapter │   ├── persistence │   │   ├── GreetingTable.java │   │   ├── HibernateGreetingRepository.java │   │   └── JpaGreetingRepository.java │   └── web │   └── WebController.java └── resources ├── application.properties ├── static └── templates └── home.html

Page 63: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

├── java │   └── de.neuland.xpdemo │   ├── XpdemoApplication.java │   ├── application │   │   ├── GreetingApplicationService.java │   │   └── GreetingData.java │   ├── domain.model │   │  ├── Greeting.java │   │ ├── GreetingInterest.java │   │ ├── GreetingRepository.java │   │ ├── Name.java │   │ └── Salutation.java │   └── port.adapter │   ├── persistence │   │   ├── GreetingTable.java │   │   ├── HibernateGreetingRepository.java │   │   └── JpaGreetingRepository.java │   └── web │   └── WebController.java └── resources ├── application.properties ├── static └── templates └── home.html

Page 64: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

@Service public class GreetingApplicationService {

@Autowired private GreetingRepository repository;

public GreetingData welcomePeople() { Greeting greeting = repository.firstGreeting(); GreetingData greetingData = new GreetingData(greeting); return greetingData; } }

Page 65: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

@Service public class GreetingApplicationService {

@Autowired private GreetingRepository repository;

public GreetingData welcomePeople() { Greeting greeting = repository.firstGreeting(); GreetingData greetingData = new GreetingData(greeting); return greetingData; } }

Page 66: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

@Service public class GreetingApplicationService {

@Autowired private GreetingRepository repository;

public GreetingData welcomePeople() { Greeting greeting = repository.firstGreeting(); GreetingData greetingData = new GreetingData(greeting); return greetingData; } }

Page 67: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

├── java │   └── de.neuland.xpdemo │   ├── XpdemoApplication.java │   ├── application │   │   ├── GreetingApplicationService.java │   │   └── GreetingData.java │   ├── domain.model │   │  ├── Greeting.java │   │ ├── GreetingInterest.java │   │ ├── GreetingRepository.java │   │ ├── Name.java │   │ └── Salutation.java │   └── port.adapter │   ├── persistence │   │   ├── GreetingTable.java │   │   ├── HibernateGreetingRepository.java │   │   └── JpaGreetingRepository.java │   └── web │   └── WebController.java └── resources ├── application.properties ├── static └── templates └── home.html

Page 68: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

├── java │   └── de.neuland.xpdemo │   ├── XpdemoApplication.java │   ├── application │   │   ├── GreetingApplicationService.java │   │   └── GreetingData.java │   ├── domain.model │   │  ├── Greeting.java │   │ ├── GreetingInterest.java │   │ ├── GreetingRepository.java │   │ ├── Name.java │   │ └── Salutation.java │   └── port.adapter │   ├── persistence │   │   ├── GreetingTable.java │   │   ├── HibernateGreetingRepository.java │   │   └── JpaGreetingRepository.java │   └── web │   └── WebController.java └── resources ├── application.properties ├── static └── templates └── home.html

Page 69: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

@Repository public class JpaGreetingRepository implements GreetingRepository {

@Autowired private HibernateGreetingRepository hibernateGreetingRepository;

@Override public Greeting firstGreeting() { Iterable<GreetingTable> rows = hibernateGreetingRepository.findAll(); GreetingTable r = rows.iterator().next(); Greeting greeting = new Greeting( new Salutation(r.getSalutation()), new Name(r.getName())); return greeting; } }

Page 70: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

@Repository public class JpaGreetingRepository implements GreetingRepository {

@Autowired private HibernateGreetingRepository hibernateGreetingRepository;

@Override public Greeting firstGreeting() { Iterable<GreetingTable> rows = hibernateGreetingRepository.findAll(); GreetingTable r = rows.iterator().next(); Greeting greeting = new Greeting( new Salutation(r.getSalutation()), new Name(r.getName())); return greeting; } }

Page 71: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

@Repository public class JpaGreetingRepository implements GreetingRepository {

@Autowired private HibernateGreetingRepository hibernateGreetingRepository;

@Override public Greeting firstGreeting() { Iterable<GreetingTable> rows = hibernateGreetingRepository.findAll(); GreetingTable r = rows.iterator().next(); Greeting greeting = new Greeting( new Salutation(r.getSalutation()), new Name(r.getName())); return greeting; } }

Page 72: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

├── java │   └── de.neuland.xpdemo │   ├── XpdemoApplication.java │   ├── application │   │   ├── GreetingApplicationService.java │   │   └── GreetingData.java │   ├── domain.model │   │  ├── Greeting.java │   │ ├── GreetingInterest.java │   │ ├── GreetingRepository.java │   │ ├── Name.java │   │ └── Salutation.java │   └── port.adapter │   ├── persistence │   │   ├── GreetingTable.java │   │   ├── HibernateGreetingRepository.java │   │   └── JpaGreetingRepository.java │   └── web │   └── WebController.java └── resources ├── application.properties ├── static └── templates └── home.html

Page 73: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

├── java │   └── de.neuland.xpdemo │   ├── XpdemoApplication.java │   ├── application │   │   ├── GreetingApplicationService.java │   │   └── GreetingData.java │   ├── domain.model │   │  ├── Greeting.java │   │ ├── GreetingInterest.java │   │ ├── GreetingRepository.java │   │ ├── Name.java │   │ └── Salutation.java │   └── port.adapter │   ├── persistence │   │   ├── GreetingTable.java │   │   ├── HibernateGreetingRepository.java │   │   └── JpaGreetingRepository.java │   └── web │   └── WebController.java └── resources ├── application.properties ├── static └── templates └── home.html

Page 74: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

├── java │   └── de.neuland.xpdemo │   ├── XpdemoApplication.java │   ├── application │   │   ├── GreetingApplicationService.java │   │   └── GreetingData.java │   ├── domain.model │   │  ├── Greeting.java │   │ ├── GreetingInterest.java │   │ ├── GreetingRepository.java │   │ ├── Name.java │   │ └── Salutation.java │   └── port.adapter │   ├── persistence │   │   ├── GreetingTable.java │   │   ├── HibernateGreetingRepository.java │   │   └── JpaGreetingRepository.java │   └── web │   └── WebController.java └── resources ├── application.properties ├── static └── templates └── home.html

Page 75: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

├── java │   └── de.neuland.xpdemo │   ├── XpdemoApplication.java │   ├── application │   │   ├── GreetingApplicationService.java │   │   └── GreetingData.java │   ├── domain.model │   │  ├── Greeting.java │   │ ├── GreetingInterest.java │   │ ├── GreetingRepository.java │   │ ├── Name.java │   │ └── Salutation.java │   └── port.adapter │   ├── persistence │   │   ├── GreetingTable.java │   │   ├── HibernateGreetingRepository.java │   │   └── JpaGreetingRepository.java │   └── web │   └── WebController.java └── resources ├── application.properties ├── static └── templates └── home.html

Page 76: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

@SpringBootApplication @EnableAutoConfiguration public class XpdemoApplication {

public static void main(String[] args) { SpringApplication.run(XpdemoApplication.class, args); } }

Page 77: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

@SpringBootApplication @EnableAutoConfiguration public class XpdemoApplication {

public static void main(String[] args) { SpringApplication.run(XpdemoApplication.class, args); } }

Page 78: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

├── java │   └── de.neuland.xpdemo │   ├── XpdemoApplication.java │   ├── application │   │   ├── GreetingApplicationService.java │   │   └── GreetingData.java │   ├── domain.model │   │  ├── Greeting.java │   │ ├── GreetingInterest.java │   │ ├── GreetingRepository.java │   │ ├── Name.java │   │ └── Salutation.java │   └── port.adapter │   ├── persistence │   │   ├── GreetingTable.java │   │   ├── HibernateGreetingRepository.java │   │   └── JpaGreetingRepository.java │   └── web │   └── WebController.java └── resources ├── application.properties ├── static └── templates └── home.html

Page 79: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

„Erkennung, Behandlung und Präventionvon Infektionskrankheiten“

P R Ä V E N T I O N

Page 80: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

Bedside-Test your Code!

Quasar® AT0

Anti-TAnti-A

Page 81: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

F R A G E N ?

Page 82: SOFTWARE HYGIENE€¦ · Big Ball of Mud . Johannes Siedersleben sd&m QUASAR „Software, die sich unterschiedlich schnell ändert, wird in unterschiedliche Module aufgeteilt.“

Q U E L L E N

https://www.flickr.com/photos/23967095@N00/

Vaughn Vernon, Implementing Domain Driven Design

Johannes Siedersleben, Moderne Softwarearchitektur

http://www.laputan.org/mud/


Recommended