Hallo,
DAOs oder Repositories werden von vielen Entwicklern zusätzlich zu einer Persistenztechnologie wie Hibernate oder JPA verwendet, aber ich frage mich: Wozu?
DAOs kommen eigentlich aus der Zeit vor Hibernate, als man hinter der DAO-Schnittstelle JDBC und SQL versteckt hat. Das DAO war sozusagen die Persistenzschicht. Gewissermaßen als Nachfolger des DAOs wurde das "Repository" erfunden, das eine objektorientiertere Schnittstelle bieten sollte.
Martin Fowler schreibt dazu in seinem Buch "Patterns für Enterprise Application-Architekturen" (eine schreckliche Übersetzung des Titels!):
"Ein Repository ersetzt spezielle find-Methoden in Data-Mapper-Klassen durch einen spezifikationsbasierten Ansatz der Objektauswahl."
Was Fowler hier meint, nennt sich bei Hibernate "Criteria". Zumindest für diesen Zweck bräuchte man also keine weitere Klasse, da Hibernate bereits die Merkmale eines Repositorys bietet.
Als weiteren Vorteil gibt er in seinem Buch an, dass man hinter der Repository-Schnittstelle auch andere Datenquellen als relationale Datenbanken verwenden könnte. Aber wenn man bereit ist, sich auf eine relationale DB festzulegen, würde auch dieser Vorteil entfallen.
Blieben noch Tests, bei denen man die DB vielleicht gerne gegen ein Mock-Objekt austauschen würde. Aber sollte man nur dafür wirklich seinen Code mit Repositories aufblähen? Nimmt man dann nicht besser EasyMock oder sowas?
Weiterhin erwähnt Fowler Caching als möglichen Vorteil, aber auch das bietet Hibernate schon ohne zusätzliches Repository.
Vom Austausch der DB beim Test abgesehen, bliebe noch der Vorteil, dass man die Erstellung von Criteria-Objekten in manchen Fällen im Repository machen könnte. Aber auch hier stellt sich mir wieder die Frage: lohnen sie dafür zusätzliche Klassen?
Mir kommt es jedenfalls so vor, als würden DAOs und Repositories von vielen Entwicklern stumpf nach Schema F eingesetzt, obwohl sie oft nicht nötig wären. Was meint ihr dazu? Habe ich bei meinen Überlegungen vielleicht etwas übersehen?
Gruß
Christian
DAOs oder Repositories werden von vielen Entwicklern zusätzlich zu einer Persistenztechnologie wie Hibernate oder JPA verwendet, aber ich frage mich: Wozu?
DAOs kommen eigentlich aus der Zeit vor Hibernate, als man hinter der DAO-Schnittstelle JDBC und SQL versteckt hat. Das DAO war sozusagen die Persistenzschicht. Gewissermaßen als Nachfolger des DAOs wurde das "Repository" erfunden, das eine objektorientiertere Schnittstelle bieten sollte.
Martin Fowler schreibt dazu in seinem Buch "Patterns für Enterprise Application-Architekturen" (eine schreckliche Übersetzung des Titels!):
"Ein Repository ersetzt spezielle find-Methoden in Data-Mapper-Klassen durch einen spezifikationsbasierten Ansatz der Objektauswahl."
Was Fowler hier meint, nennt sich bei Hibernate "Criteria". Zumindest für diesen Zweck bräuchte man also keine weitere Klasse, da Hibernate bereits die Merkmale eines Repositorys bietet.
Als weiteren Vorteil gibt er in seinem Buch an, dass man hinter der Repository-Schnittstelle auch andere Datenquellen als relationale Datenbanken verwenden könnte. Aber wenn man bereit ist, sich auf eine relationale DB festzulegen, würde auch dieser Vorteil entfallen.
Blieben noch Tests, bei denen man die DB vielleicht gerne gegen ein Mock-Objekt austauschen würde. Aber sollte man nur dafür wirklich seinen Code mit Repositories aufblähen? Nimmt man dann nicht besser EasyMock oder sowas?
Weiterhin erwähnt Fowler Caching als möglichen Vorteil, aber auch das bietet Hibernate schon ohne zusätzliches Repository.
Vom Austausch der DB beim Test abgesehen, bliebe noch der Vorteil, dass man die Erstellung von Criteria-Objekten in manchen Fällen im Repository machen könnte. Aber auch hier stellt sich mir wieder die Frage: lohnen sie dafür zusätzliche Klassen?
Mir kommt es jedenfalls so vor, als würden DAOs und Repositories von vielen Entwicklern stumpf nach Schema F eingesetzt, obwohl sie oft nicht nötig wären. Was meint ihr dazu? Habe ich bei meinen Überlegungen vielleicht etwas übersehen?
Gruß
Christian