Frage

Ich habe ein Task-Manager-Programm mit Java geschrieben und machte eine einzelne UI Implementierung für den Moment in Schwung. Das Programm besteht aus 3 Schichten im Moment. Eine Präsentationsschicht, dass wirkt mit der Domänenschicht über einen Use-Case-Controller, und schließlich eine technische Dienstschicht für die Persistenz verwendet. Es gibt mehrere Aktionen einen Benutzer an diesem Punkt nehmen kann, wie Aufgaben hinzufügen, bearbeiten den Status einer Aufgabe, etc ... Der Zweck meines Logger in diesem Schema ist die Übersicht über alle Aktionen, die von den Benutzern hochgeladen zu halten. So gibt es ein paar Orte, wo ich den Logger aufrufen könnte einen Befehl zu schreiben. Ich werde keine Protokollierung in der Präsentationsschicht tun, da dies eine schreckliche Design-Entscheidung sein würde, und so bin ich mit dem Regler nach links, der Kommandoschnittstelle (implementiert die Ausführung aller Befehle für die Zwecke der Durchführung der Undo / Redo-Funktionen zu handhaben ) oder in den unteren Ebene Klassen, die tatsächlich manipuliert werden, zum Beispiel die Task-Klasse sagen.

Ich denke, der Controller eine relativ anständige Option dafür ist, wie es als Kontaktpunkt zwischen der UI-Ebene wirkt und die Domäne, also alle bemerkenswerten Befehle passieren schließlich durch die Steuerung macht es einfach, um sicherzustellen, dass alle wichtigen Methoden angemeldet werden. Ein Grund, es nicht in der Steuerung zu tun, ist, dass es um den Zusammenhalt zu reduzieren, erhöht Kopplung und möglicherweise zu einem aufgeblähten Controller führen.

Die konkreten Befehle sind eine andere mögliche Position, wie sie auch alle Informationen haben für die Protokollierung benötigt. Dies würde bewirken, dass die Befehle wieder weniger kohäsiv werden, und erhöht die Kopplung. Auch, wenn ich die Kommandoschnittstelle nicht verwenden für eine Aktion auf einem Domain-Objekt nehmen, als ich verliere meine Protokollierung.

Schließlich Dies führt mich den Logger im unteren Level-Domain zur Umsetzung Objekte Methoden. Dies ist ein guter Kandidat, weil die Protokollierung immer, wenn das Programm auftreten wird verwendet wird und alle erforderlichen Informationen zur Verfügung. Der einzige negativer Teil besteht, dass Logger Befehle dünn unter der unteren Ebene Domäne verstreut werden, um Objekte so dass es schwieriger, um sicherzustellen, dass protokolliert werden alle der richtigen Methoden.

Ich würde gerne eine Debatte los geht über diese Art der Entscheidung und schätzen alle Ihre Kommentare.

War es hilfreich?

Lösung

Denken Sie zuerst über Praktikabilität. Die Protokollierung ist oft eine Wartung und administrative Bedeutung. Jede Schicht in Ihrem Design ist ein Kandidat für die Protokollierung, aber für etwas anderen Gründen.

Ohne wirklich Ihre Objekthierarchie und Design zu wissen ...

Wenn man von Domäne zu UI, wobei jede Schicht ist eine Abstraktion oder eine Sammlung von Verhalten der vorherigen Schicht. Man muss sich fragen, Dinge wie das, was Ebene der Granularität suchen Sie? Wäre es sinnvoll sein, eine Protokollierung eines Befehls zu sehen? Wäre es auch nützlich sein, die Protokollierung zu sehen für jeden zugeordnete Domain-Schicht Anrufe? Es ist nicht immer leicht zu entziffern Domain Anruf und verbinden sie mit einem bestimmten Befehl.

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