Frage

Ich habe auf DDD Lesen und ich denke, dass ich mit Dienstleistungen falsch oder zumindest in einem nicht so idealen Weg sein kann. Mein Service-Klassen sind in der Regel schon einige Instanzvariablen enthalten Repository Referenzen haben und sie scheinen eine Menge Arbeit zu tun (das heißt eine Menge von Methoden haben).

Ist es ratsam, gezieltere Dienstleistungen zu schaffen? Wie ein Verfahren pro Dienst, führt einige spezifische Logik? Auch sollte Serviceklassen speichern Instanzvariablen an andere Unternehmen? Ich las etwas über Dienste staatenlos, ich bin nicht sicher, ob ich diese Regel breche durch diese Instanzvariablen haben.

Danke!

War es hilfreich?

Lösung

  

neigen Meine Serviceklassen recht haben,   einige Instanzvariablen ...

Dies ist nicht unbedingt ein Code-Geruch. Wenn Ihr Dienst viele Abhängigkeiten erfordert seine Arbeit abzuschließen, dann ist dies einfach eine Tatsache.

  

... sie scheinen eine Menge Arbeit zu tun (das heißt   haben viele Methoden).

     

Ist es ratsam, gezieltere Dienstleistungen zu schaffen?

Als allgemeine Regel gilt, je mehr granulare Sie Ihre Service-Schnittstellen machen können (dh je weniger Methoden), desto besser (je über eine Schnittstelle mit fünfzig Methoden darauf Schleppnetz haben für eine suchen, die Sie anrufen wollen? ). Aber es sei denn, Sie als eine öffentliche API veröffentlichen, kann die Granularität Ihrer Service-Schnittstellen verfeinert werden, wie Sie gehen zusammen. Oft, wenn ein Projekt beginnen, werde ich mit nur einem Service beginnen und im Laufe der Zeit aufgespalten wird. Wenn Sie die Verbraucher dieser Dienste sind, dann, wenn Sie beginnen, den Schmerz einer Schnittstelle zu fühlen, zu groß wird, wissen Sie, es ist Zeit, es zu brechen. Natürlich, wenn diese is eine öffentliche API, dann werden Sie viel mehr up-Front-Design zu tun haben.

  

Auch sollte Serviceklassen speichern Instanzvariablen an andere Unternehmen? Ich las etwas über Dienste staatenlos, ich bin nicht sicher, ob ich diese Regel breche durch diese Instanzvariablen haben.

Speichern von Abhängigkeiten als Instanzvariablen nicht unbedingt bedeuten, dass Ihr Dienst nicht staatenlos ist, solange die Instanzvariablen sind auch staatenlos. Zu berücksichtigen staatenlos, Methodenaufrufe auf einen Dienst dürfen nicht in irgendeiner Weise hängen von den bisherigen Methoden, die aufgerufen wird. Sie sollten eine einzelne Instanz Dienst laden können, und haben es für Ihre Anwendung gemeinsam genutzt (das heißt eine Instanz eines staatenlos Dienst nicht spezifisch für eine bestimmte Benutzersitzung sein soll). Mit anderen Worten, sollten Sie da keinen Zustand zwischen Methodenaufrufen pflegen. staatenlos Repository Abhängigkeit als eine Variable auf einer Dienstinstanz zu speichern diese Anforderung nicht verletzen.

Die Dienstleistungen staatenlos Grund ist ein erstrebenswertes Ziel ist, die kein Staat stark die Möglichkeit von Fehlern reduziert. Es vereinfacht das Testen eines Dienst des Verfahrens durch die Testfälle zu beschränken, um die Parameter in unterschiedlichen weitergegeben, anstatt zu befürchten dem vorherigen Zustand des Dienstes. Es kann auch Leistungsvorteile bieten.

Andere Tipps

Ich würde empfehlen, auf Dependency Injection Lesen up, Inversion of Control und dergleichen.

Hier ist Fowler Artikel: http://martinfowler.com/articles/injection.html , obwohl ich fand ihn immer ein wenig übertrieben zu sein. Ich würde zu Fuß durch ein Tutorial versuchen, die einen DI / IoC-Container repräsentiert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top