Ich habe Repository-Muster (DDD und POEAA) seit einiger Zeit verwendet. Einige unserer Teammitglieder haben jedoch argumentiert, dass es nur eine zusätzliche Ebene der Abstraktion und unnötig ist. Ich kann einige Vorteile in ihren Argumenten sehen. Moderne ORM-Lösungen (NHibernate oder EF) haben fast alles, was Sie brauchen. Ich suchte und fand einen Artikel wie this und counterargument zu diesem Thema. Ist das Repository-Muster also ein Overkill?Ist Repository-Muster ein Overkill
Antwort
Es hängt hauptsächlich von der Komplexität Ihres Problems und der Rolle Ihres Domänenmodells in der Lösung ab. Für einfache Lösungen ist das Repository wahrscheinlich übertrieben. Aber für komplexe Domänen mit einer robusten Sprache und sich entwickelnden Bedürfnissen/Anforderungen ist das Repository eine nette, saubere Abstraktion, die den Domain-Objekt-Lebenszyklus besitzt. Viele ORMs werden viel davon tun, aber in einer komplexen Domäne wird es immer einige Domänenaktivitäten geben, die in einem Repository sinnvoll sind und die von einem ORM nicht ohne weiteres unterstützt werden.
Fazit: Es hängt vom Kontext ab.
Mocking Datenzugriff in Komponententests ist der Hauptgrund, warum ich Repository-Schnittstellen verwenden. Ein weiterer Grund für die Wartbarkeit - Sie können problemlos Caching-Strategien implementieren oder zu einer anderen Datenzugriffsimplementierung wechseln, z. B. Daten vom Dienst anstelle von DB abrufen.
Der einzige Grund, warum wir Repositories in unserem Projekt verwenden, ist, dass er unsere Aggregatwurzeln erzwingt (wir erlauben nur Repositories für ARs), so dass Sie den AR richtig durcharbeiten, anstatt nach etwas zu fragen.
Und wie Al erwähnt .. es bietet eine nette Schnittstelle, um während Komponententests zu verspotten.
- 1. Ist Java Foreach-Schleife ein Overkill für die wiederholte Ausführung
- 2. WebApi und Controller Overkill
- 3. Java Enum Overkill?
- 4. Ist NSNumber Overkill für einen Zähler auf Instanzebene?
- 5. Ist es Overkill, BufferedWriter und BufferedOutputStream zusammen zu verwenden?
- 6. Verwendet linq in dieser Situation Overkill
- 7. ZooKeeper und RabbitMQ/Qpid zusammen - Overkill oder eine gute Kombination?
- 8. Wie ist das .net Entity Framework Overkill im Vergleich zu LinqToSql?
- 9. Ist es Overkill, Subversion in eine Anwendung mit einem einfachen Dateiarchiv zu integrieren?
- 10. Was ist ein PHP-Framework und was ist ein guter?
- 11. Google AMP: Was ist ein Layout? Was ist ein Behälter?
- 12. Ist MEF ein Abhängigkeitsinjektionsframework?
- 13. Was ist ein Protokoll?
- 14. Was ist ein Objekt?
- 15. Was ist ein "Pinsel"?
- 16. Was ist ein UIViewController
- 17. Was ist ein Kontextwechsel?
- 18. Was ist ein Inferenztyp?
- 19. Was ist ein Pastenskript?
- 20. Ist das ein Speicherleck?
- 21. Was ist ein Gruppenleiter
- 22. Was ist ein Bitmuster?
- 23. Ist. @ Ein Javascript-Symbol?
- 24. Was ist ein CGVector?
- 25. Was ist ein tGrid?
- 26. Was ist ein LPTHREAD_START_ROUTINE?
- 27. PopUpDiv ist ein div
- 28. Ist ein Monat vergangen?
- 29. Was ist ein ImageObserver?
- 30. Ist Pfad ein Verzeichnis?
Sie können nie falsch liegen mit "es kommt darauf an". :) –
@Arnis - Deshalb haben wir als Entwickler nicht nur Hämmer, wir haben auch eine ganze Toolbox. – Martin
@Martin einige haben Klebeband nur :) –