Python vs. PHP
Show all projects!

Buchrezension: Object Design Style Guide von Matthias Noback

Object Design Style Guide von Matthias Noback
Object Design Style Guide von Matthias Noback

AutorMatthias Noback
TitelObject Design Style Guide
SpracheEnglisch
Erschienen: Im Manning Verlag, Dezember 2019, ISBN 9781617296857

Buchrezension

Auf Empfehlung eines Arbeitskollegen hin habe ich mir das Buch Object Design Style Guide von Matthias Noback bestellt. Da ich es in Ruhe lesen, wollte abseits des Bildschirms, habe ich mich für die gedruckte Version entschieden. Das Buch ist in leicht zu lesendem Englisch geschrieben.

Allgemein

Das Buch gibt gibt eine Praxisanleitung für die Objektorientierte Programmierung. Dabei versucht der Autor anhand von Codebeispielen zu erläutern wie man verständlichen und wartbaren Code schreibt, indem er die Probleme der verschiedenen Implementierungen beschreibt. Hierbei wird nicht die Theorie dahinter in den Vordergrund gestellt, sondern dient dem Leser als Orientierung um auch in der Kommunikation mit anderen Entwicklern die entsprechenden Fachterminus zu kennen (Optimierte Kommunikation).

Die für die Codebeispiele verwendete Sprache ist eine leicht verständliche Pseudo-Programmiersprache die sich zwischen PHP und Java ansiedelt. Jedes Kapitel bringt Aufgaben und Lösungen mit.

Kapitel 1: Programming with objects: A primer

Das erste Kapitel macht eine kurze Zusammenfassung wie Objekte technisch strukturiert sind. Das sind Voraussetzungen die der Leser mitbringen sollte und hier notfalls auffrischen kann.

Kapitel 2: Creating services

Das Kapitel erklärt die Grundlegende Arten von Services, deren sauberen Initialisierung und Umgang mit den Abhängigkeiten. Dazu gehört auch das Thema, welche Parameter gehören in den Konstruktor, welche werden einer Methode übergeben.

Hier werden wichtige Grundlagen der Objektorientierung vermittelt und klar unterteilt welch Objekttypen man in der Umsetzung nicht vermischen sollte.

Kapitel 3: Creating other objects

Ein Kapitel über Entities, DTO's und Value Objects. Es erläutert wie man dafür sorgt, dass diese in einem konsistenten Zustand bleiben (Außer DTO). Zudem hilfreiche hinweise über die Benennung sinnvoller Methodennamen und dem Umgang mit Inkonsistenzen.

Kapitel 4: Manipulation objects

In diesem Kapitel wird darauf eingegangen welche Objekte veränderbar und welche es nicht sein sollten um intransparente Fernwirkungen zu vermeiden. Und wie man dabei durch Events in Objekten die Veränderungen des Zustands durch Command methods registrieren kann.

Kapitel 5: Using objects

Genereller Aufbau von Objekten abseits seiner Business Logik (Input-/Output validation) Exception handling usw.

Kapitel 6: Retrieving information

Der Autor geht in diesem Kapitel auf den den Aufbau von Repositories ein, wann und warum man diese bei überschreiten der Systemgrenzen einsetzt. Auch wie man die Abfragen gestalten sollte und diese Repositories in UnitTests gegen Stubs/Fakes tauscht. Dabei wird das CQRS Prinzip anhand von Praxisbeispielen angewendet.

Kapitel 7: Performing tasks

Hierbei wird der Einsatz von command Method und Events behandelt um Aufgaben zu erledigen. Ziel des Kapitels ist es zu Erkennen wann welche einzusetzen sind.

Kapitel 8: Dividing responsiblities

Das Kapitel behandelt die Trennung von Lese-/Schreibmodellen für die verschiedenen Anforderungen einer Applikation. Auch der Aufbau von Read models from domain events wird behandelt und abgegrenzt zum Thema Event sourcing.

Kapitel 9: Changing the behavior of services

Dieses Kapitel widmet sich dem Thema wie man eine Applikation so aufbaut, das es einfach möglich bleibt Anpassungen vorzunehmen ohne Basisklassen anzupassen. Dazu gehören die Themen Inheritance (Ableitung), Template method und Composition.

Kapitel 10: A field guide to objects

In diesem Kapitel wird das vermittelte Wissen über die verschiedenen Objekttypen anhand einer Webapplikation noch einmal verdeutlicht. Dabei wird ersichtlich in welcher Art und Weise die Objekte miteinander zusammenhängen.

Kapitel 11: Epilogue

Hier gibt der Autor Hinweise auf weiterführende Literatur und Prinzipien wie hexagonal architecture und Domain driven design.

Fazit

Das vom Autor selbst gesetzte Ziel "..., and it often proves difficult to apply the theory to everyday coding problems.", also das Vermitteln der Theorie hinter Objektorientierten Programmieren in einer anwendbaren Form mit Bezug zum Alltag eines Entwicklers, wir meiner Meinung nach sehr gut erreicht.

Viele Codestellen aus dem Buch decken sich mit den Problemen die ich bei mir und anderen Entwicklern sehe und dessen Lösung ich nun durch nicht selber erläutern sondern auf entsprechende Stellen im Buch verweisen kann.

Die im Buch gestellten Aufgaben fördern meiner Meinung nach das Verständnis und sind gut nachzuvollziehen.

Gut das es das Buch gibt. Zum einen es erleichtert die Ausbildung von Azubis in der Praxis, zum anderen gibt es Entwicklern die sich durch Erfahrung weiter entwickelt haben den Bezug zu den dahinter stehen Theorien ihres erlernten "Bauchgefühls".

Ich persönlich habe am meisten aus dem siebten Kapitel mitnehmen können. Hierbei wird verständlich die Abgrenzung von Buisness Logik in primary Tasks und secondary Tasks erklärt. Jetzt finde ich den Unterschied einfach und klar, vorher habe ich das über mein Gefühl geregelt.

In einem anderen Artikel habe ich für mich noch ein paar Gedanken formuliert wo ich die Grenzen für so manche Regel sehe.

Begrifflichkeiten

Einige Notizen die ich mir beim lesen des Buches gemacht habe damit ich stellen schnell wiederfinden kann. Sie sind vielleicht hilfreich wenn man in Google danach sucht, auf dieses Buch zu stoßen.

  • 44 static dependency = Service Locator und $_GLOBAL
  • 50 predictable services
  • 53 Common Factory Tasks
  • 61 Service Graph
  • 73 named constructors
  • 81 Constructor Argument assertions
  • 91 fillers
  • 116 Immutables with Domain logic function names
  • 118 command method
  • 131 collect domain events != implement event listener
  • 160 crosssystem bounderies
  • 172 Secondary tasks as events
  • 203 Event sourcing
  • 222 template composition / composition

Article relase date: / Last update: