2009-08-18 9 views
3

Ich denke über die Implementierung eines Domain Driven Design-Ansatzes (ähnlich dem beschriebenen here), aber möchte es mit dem Doctrine ORM integrieren. Hat jemand irgendeinen Erfolg gehabt, etwas so zu tun?Verwenden von Doctrine mit domänenbasiertem Design

Mein erster Instinkt war, Doctrine als DAO-Layer zu verwenden, aber es scheint ein wenig verworren für Doctrine, um meine Datenbankfelder abzubilden, und meine Entitätsobjekte entsprechen (im Wesentlichen) demselben Satz von Feldern im Doctrine-Objekt.

Mein ursprüngliches Ziel war es, meine gesamte DQL/Abfragelogik von meinen Domain-Entities zu trennen, aber jetzt fühle ich mich im Design-Pattern-Land ein wenig verloren.

Ich weiß Doctrine 2 soll eine viel freundlichere Herangehensweise an DDD-Techniken bieten, aber ich bin mir nicht sicher, ob ich so lange warten möchte. Macht das, was ich machen will, Sinn, oder sollte ich einen anderen Ansatz finden?

Danke.

Antwort

2

Lehre ist, meiner Meinung nach, unvollkommen für DDD wegen des Fehlens einer Repository Klasse. Doctrine unterstützt Muster wie Table Data Gateway und Active Record, wobei gute Muster für bestimmte Probleme nicht unbedingt die beste Wahl für "klassische" DDDs sind. Sie können jedoch diese Mängel umgehen.

Eine Option besteht darin, von Doctrine_Table abzuleiten und diese als Repository eines armen Mannes zu verwenden. Wenn Sie beispielsweise eine Klasse namens "BlogPost" haben, verfügen Sie möglicherweise über eine Tabellenklasse "BlogPostTable", die von Doctrine_Table erbt. Sie können der BlogPostTable-Klasse dann Methoden wie "findByCategory" hinzufügen und diese Logik getrennt von Ihren Domänenobjekten (die von Doctrine_Record erben) beibehalten. Es ist nicht genau dasselbe wie die Muster, die von "reinem" DDD befürwortet werden, aber es ist nahe genug.

Auch ohne die exakt gleichen Designmuster können Sie die zentralen Erkenntnisse von DDD trotzdem nutzen. Das wichtigste ist die Ubiquitous Language, das Konzept, bei dem versucht wird, Ihre Domain mit einer präzisen Sprache zu beschreiben, die sowohl von Domänenexperten als auch von Entwicklern gelesen werden kann.

+0

Danke. Ich denke, diese Antwort spiegelt meine Erfahrungen vollständig wider. Doctrines quadratischer Stift passt einfach nicht richtig in das runde Loch von DDD. Am Ende behandelte ich meine Doctrine_Record-Klassen als meine Entitäten und implementierte eine grundlegende Repository-Klasse mit Doctrine_Table als DAO-Layer. Während es mir den größten Teil der Trennung gibt, die ich wollte, fühlt es sich ein bisschen ungeschickt oder über-architected an, da die Repositories manchmal überflüssig sind. –

+0

Stolperte über diese Antwort von Google und dachte, es wäre erwähnenswert, dass dies jetzt veraltet ist, da Doctrine2 das Data Mapper-Muster implementiert und Entitäten POPOs sind, was es perfekt für DDD macht und wunderbar an SRP hält. –

Verwandte Themen