Hier geben wir Einblicke in das Unternehmen, Gedanken, How-Tos, Wissenswertes und News, die sich aus der Programmierung und Projekten ergeben. Auch unsere Open Source Aktivitäten begleiten wir hier.

Corporate Blog der prooph software GmbH

PHP DDD Cargo Sample

PHP DDD Cargo Sample - Cargo Container

Cargo Container - Tracking Lösung für die Logistik

Domain Driven Design ist eine etablierte Herangehensweise an die Modellierung von Software und doch ist es auch heute noch schwer entsprechende Beispielanwendungen für DDD zu finden, vor allem in der PHP Welt. Eric Evans Cargo Sample aus dem "blauen Buch" wurde natürlich in Java und auch C# nachgebaut. Meine Idee ist nun, dies auch für PHP zu tun.

Domain Driven Design in der PHP Welt

Mittlerweile wird neben den Platzhirschen Java und C# auch PHP in Business Anwendungen mit einem hohen Anteil an Prozesslogik eingesetzt. Ursache dafür ist der Trend, webbasierte Software verstärkt unternehmensintern einzusetzen, wo PHP mit seiner Shared Nothing Architektur seine Stärken ausspielen kann. Keine andere Programmiersprache ist im Web-Umfeld so zuhause wie PHP. Allerdings werden PHP Entwickler damit vor völlig neue Aufgaben gestellt. Für Business getriebene Anwendungen hat sich die Modellierung nach Domain-Driven Design bewährt. Eine Vorgehensweise, die viele Vorteile mitbringt, aber auch recht hohe Ansprüche an Softwareentwickler stellt. Die Theorie, die von Eric Evans aufgestellt wurde, klingt erstmal recht einleuchtend und gut umsetzbar, doch der Teufel steckt im Detail. Das richtige Maß beim Modellieren von Aggregaten zu finden, die korrekte Abgrenzung der Contexte einer Domain zu definieren oder auch einfach nur die passende Projektstruktur anzulegen, sind keine leichten Aufgaben.

Das Original DDD Cargo Sample

Eric Evans hat in seinem Buch Domain Driven Design: Tackling Complexity in the Heart of Software eine Beispielanwendung beschrieben, an der er die Vorgehensweisen zur Umsetzung von DDD erläutert. Dieses Sample wurde in Java auch implementiert. Das Ergebnis inkl. vieler Hinweise dazu findet ihr auf der Projektseite auf Sourceforge. Unter anderem rufen die Autoren auch dazu auf, das Cargo Sample auf verschiedenen Plattformen zu implementieren, um die jeweiligen Eigenheiten der Plattform anhand des Beispiels herauszuarbeiten. Softwareentwickler, die von einer Plattform auf eine andere wechseln, bekommen damit eine Orientierungshilfe. Die Idee finde ich sehr gut und möchte aus gegebenem Anlass dem Aufruf folgen und das DDD Cargo Sample für PHP implementieren. Gegebener Anlass deswegen, weil ich momentan an einem Projekt beteiligt bin, das als Leuchtturm-Projekt in einem Enterprise Unternehmen durchgeführt wird und die zukünftige Entwicklung im Konzern maßgeblich beeinflussen soll. Seit über 20 Jahren wurde mehr oder weniger prozedualer Code geschrieben und nun soll mit einer sauberen Neuentwicklung einer zentralen Anwendung die endgültige Wende herbeigeführt werden. Die Entscheidungen, die wir in dem Projekt treffen, möchte ich in das Cargo Sample einfließen lassen und euch somit indirekt am Prozess teilhaben lassen, auch wenn wir natürlich beim Kunden keine Anwendung zur Verwaltung von Frachtgut programmieren. An dieser Stelle aber auch von mir nochmal der Hinweis, dass eine DDD Beispielanwendung nicht die komplette Vorgehensweise beschreiben kann. Domain Driven Design ist ein iterativer Prozess, der von der jeweiligen Fachlichkeit abhängt und somit immer wieder neu definiert werden musss. Auch haben sich mittlerweile Methodiken weiterentwicklt und es sind Konzepte entstanden, die auf DDD aufsetzen und weitere Aspekte in die Modellierung einbringen. Wir evaluieren zum Beispiel gerade den Einsatz von CQRS und EventSourcing und haben dazu bereits eine PHP Library entwickelt und eine kleine Beispielanwendung geschrieben, die die generelle Verwendung von CQRS zeigt. Bei Interesse schaut euch einfach mal die prooph components an: getprooph.org.

Implementierung des DDD Cargo Sample

Ich werde die DDD Cargo Sample Anwendung kapitelweise implementieren, also den iterativen Schritten in Eric Evans Buch folgen. Für jedes Kapitel wird es ein Release geben, damit man anschließend die Änderungen nachverfolgen kann. Den aktuellen Entwicklungsstand könnt ihr jederzeit auf meinem Github Account einsehen: codeliner/php-ddd-cargo-sample und natürlich gerne auch mitbegleiten. Ich würde mich über Contributions und Feedback freuen. Wenn ihr an einer dauerhaften Mitwirkung interessiert seid, schreibt mir eine Mail und ich richte euch Push-Rechte für das Repository ein.

Sie suchen einen Software Dienstleister für Ihr Projekt: Projektanfrage stellen

Blog Artikel mit ähnlichen Themen