2010-12-27 6 views
-1

Ich definiere eine Fassade, die einige Funktionalitäten offenlegen muss. Mein Zweck besteht darin, die Präsentationsschicht und die Web-Services-Schicht von der Geschäftslogik zu entkoppeln. Nur um es zu sagen, das ist Fassadenmuster Definition:Wie muss die Signatur im Fassadenmuster geschrieben werden?

Stellen Sie eine einheitliche Schnittstelle zu einer Reihe von Schnittstellen in einem Subsystem. Fassade definiert eine übergeordnete Schnittstelle, die das Subsystem erleichtert die Verwendung

Ich habe diese Zweifel:

  1. Wenn ein Verfahren für eine Fassade zu schreiben, habe ich immer im Zweifel über ihre Komplexität des Parameters. Ich denke, dass eine lange Liste von Sprachen primitiver Parameterliste in einer Methode schwer zu lesen und unhandlich ist, aber sehr klar über die Informationen, die ihr gegeben werden müssen. Andererseits denke ich, dass die Verwendung von DTOs besser wäre, weil sie den Geschäftskonzepten näher sind als primitive Methoden, aber Programmierer wissen nicht leicht, welche Parameter im DTO zu erfüllen sind ... welche Vorgehensweise halten Sie für besser und Warum?

  2. Ich verwende drei Arten von Ausnahmen: Geschäftsausnahmen (verwendet für Geschäftsregeln und so ...), Validierungsausnahmen und Systemausnahmen. Wie sollten sie verabschiedet werden, wenn sie an die Verbraucher der Fassade geworfen werden, die die Art des Verbrauchers berücksichtigen (z. B. Web-Service, Präsentationsschicht usw.)?

danke!

P. D .: Bitte schreiben Sie Ihre Beispiele in C Sharp oder Java

Antwort

0

Ist es in einem obigen Beispiel wirklich in Ordnung? Ich meine:

Nehmen wir an, wir verwenden JPA, haben Bündel von Entitäten, und einer von ihnen ist Person. Es ist nur ein normaler POJO, nur mit etwas JPA Magie kommentiert. Ist es wirklich notwendig, PersonDTO zu schreiben (vorausgesetzt, es ist eine Art Person Spiegel), nur um JPA Annotationen loszuwerden? Wenn mein Ziel darin besteht, Personeninformationen zurückzugeben, würde ich die Person-Instanz einfach zurückgeben. Wenn ich mehr Informationen zurückgeben möchte, z. gegebene Person, sein Profil und andere Daten, die in Service-Schicht berechnet werden, würde ich Klasse wie verursachen:

public PersonInfo { 
Person p; 
PersonProfile; 
... additional attributes required by contract... 
} 
0

Ihre Fassade Methoden würden DTOs zurückzukehren. zum Beispiel in Java so etwas wie

PersonDto findPersonByName(String name) { ... } 

Da Ihre Fassade wiederverwendbar sein muss, sollten Sie Ausnahmen von der Schicht übergeben, die Ihre Fassade verwendet, und dann tun, was es angemessen ist.

+0

Die gleichen Ausnahmen, sollte nicht Präsentationsschicht und WS-Schicht nicht bewusst sein über niedrigere Schichtausnahmeschichten? – JPCF

+0

@jpcf, ich verstehe nicht. – hvgotcodes

+0

Soll die Präsentationsschicht das gleiche DTO-Klassenpaket (offensichtlich in Ihrem Beispiel muss es auf diese Weise gemacht werden) und das Exception-Paket wie die anderen App-Ebenen verwenden? – JPCF

0

Ja, Ihre Fassadenmethoden würden DTOs zurückgeben und sie könnten einige bequeme Methoden haben, um sich selbst in Webservice-Anforderungsobjekte umzuwandeln und einen Konstruktor aus einer Antwort zu erstellen (macht das Leben ein wenig leichter). Sie können diese DTOs auch als Befehlsobjekte verwenden, um Ihre Ansichtslayer (wie im Frühjahr und in den Struts) zu durchlaufen. Sie möchten möglicherweise nicht alle Arten von Ausnahmen für Benutzer direkt anzeigen, da Sie sie in einigen Fällen in eine benutzerfreundliche Nachricht übersetzen möchten. So werden Ihre Faces alle Ausnahmen von Ihrer Service-Ebene wie "System nicht verfügbar" und andere Nachrichten abfangen und erneut eine freundliche Nachricht an die Benutzer senden.

Verwandte Themen