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 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 Fachausdrücke 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 grundlegenden 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 Aufbau von Repositories ein, wann und warum man diese, beim Ü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, dass 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, wird 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, dass 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 stehenden 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 die Buchstellen 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: