2011-01-01 7 views
2

Wenn die Präsentationsschicht nur dann Dienste verwenden soll, müssen Serviceklassen die gleichen Methoden verfügbar machen, die bereits von Repositorys implementiert wurden, um sie der Präsentationsschicht verfügbar zu machen.In DDD kann die Präsentationsschicht sowohl die Repository- als auch die Service-Klasse verwenden?

Das scheint falsch. Kann jemand das für mich klären?

+0

Wie viele Schichten sprechen wir? Welche haben Sie für die Entwicklung verantwortlich? –

+0

Ich entwickle die ganze Anwendung. Um Ihnen eine Idee zu geben, sprechen wir über eine Benutzeroberfläche, die beim Laden eines Blogposts die Anzahl der Aufrufe erhöht. Mein Repository würde mir die Blog-Entität geben und mein Service würde die Anzahl erhöhen. Wenn meine Benutzeroberfläche nur mit dem Service interagieren soll, muss dieser Service eine Methode bereitstellen, die wiederum mein Repository aufruft, um das Blog zu erhalten. Die Frage ist also richtig, dass die Benutzeroberfläche die Blog-Entity direkt aus dem Repository anstatt aus dem Service holt? – Roman

Antwort

3

Meine Wette ist, dass es falsch scheint, weil Sie dieses Abstraktionsniveau nicht wirklich brauchen.

Anwendungsdienste sind facades. Eine schlechte Fassade fügt mehr Komplexität hinzu, als sie löst. Etwas wie folgt aus:

public int Increment(int v){ v=v+1;return v;} 

Es sei denn, es Komplexität löst genug oder Sie möchten explizit alles durch zusätzliche Schicht gehen, um Client so viel wie möglich zu entkoppeln - es ist nutzlos.

Persönlich würde ich nur diese Dinge im Controller-Stick (wenn MVC-Muster verwendet wird):

public ActionResult ViewBlogPost(int id){ 
    //I like to name repositories as collections 
    var blog=_blogs.Find(id); 

    blog.IsBeingViewedBy(_currentViewer); 
    return View(blog); 
} 
+0

Bedeutet dies, dass Sie die Domänendienste alle zusammen vermeiden werden? – Roman

+0

@Am Ich spreche über Anwendungsdienste. Domain-Dienste sind verschiedene Dinge. Aber yeah, ich versuche Domain-Services zu vermeiden, weil der Domain-Service ein Zeichen dafür ist, dass das Modell keinen aggregierten Root hat. –

0

Um „Schicht Reinheit“ zu haben - ja, das ist der Weg, es zu tun. Aber Sie können leicht vermeiden, viel redundanten Code zu haben. Machen Sie eine BaseService, die alle gängigen Methoden definiert (wie save(..), update(..), delete(..)). Andere, komplexere Methoden erfordern (und sollten) eine Interaktion mit dem Domänenobjekt.

Übrigens wird manchmal angenommen, dass in DDD auf die Repository-Schicht aus dem Domänenobjekt zugegriffen wird. Obwohl ich denke, dass das falsch ist, ist es manchmal der Fall. Wenn das auch Ihr Fall ist, dann ist es service > domain object > repository, und es kann keine "Abkürzungen" geben

Verwandte Themen