-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Software Design DefaultCoverGenerator usw. überarbeiten bzw. erläutern #45
Comments
Die Funktion Die Logic für |
Im Augenblick haben wir ja mind. zwei Ebenen der Abstraktion, den "CoverGenerator" und den "PdfGenerator". Es ist nicht ganz klar, dass beide Ebenen (im Betrieb) unabhängig voneinander austauschbar sein müssen. Auch jetzt enthält die CoverGenerator-Implementation schon Code der spezifisch für die "PdfGenerator"-Implementaton ist. Die Änderungsvorschläge oben versuchen eine der beiden Ebenen zu beseitigen bzw. die beiden Ebenen miteinander zu verschmelzen. |
Bitte noch den "PdfGenerator" Namespace entfernen. Insbesondere wenn |
Eine separate "PdfGenerator"-Klasse macht nur Sinn, wenn sie unabhängig ist von den speziellen OPUS 4 Datenmodell-Klassen, wenn sie keine Vorverarbeitung der Metadaten vornimmt. Eine solche Klasse sollte nur Konfiguration haben, welches Template usw. und dann die Metadaten einfach als Array bekommen. Die Aufgabe der Klasse wäre es dann nur noch die Metadaten in ein Template einzufügen, ohne zusätzliche inhaltliche Verarbeitungslogik. Eine solche Klasse wäre dann austauschbar. Man könnte die Latex-Generierung durch HTML/CSS oder eine andere Technik austauschen. Ich denke so war das ursprünglich gedacht. Die Vorverarbeitung im "CoverGenerator" würde bestimmen welche Metadaten zur Verfügung stehen. Wenn das Array mit den Metadaten Lizenzen mehrsprachig enthalten soll, müsste dafür eine passende Datenstruktur vorbereitet werden, die es dann möglich macht im Template die gewünschte Sprache abzurufen. An vielen Stellen in OPUS 4 wird die Ausgabe mit XSLT erzeugt, z.B. in der Frontdoor. Eine mehrsprachige Anzeige von Lizenzen wären auch dort nicht direkt machbar, weil das XML die Lizenzen in nur einer Sprache enthält. Das wird sich durch einen Übersetzungsmechanismus für Lizenzen auch nicht ändern.
Ist es notwendig die Klassen so zu implementieren? Nein, im Augenblick glaube ich nicht, dass das notwendig ist. Es würde eine allgemeine Nutzung des PdfGenerators ermöglichen, unabhängig von Deckblättern, aber dafür haben wir bislang keine Anforderungen und es gibt viele andere wesentlich wichtigere Aufgaben. Es ist auch denkbar, dass das Dokument-XML mit XSLT direkt in ein Zwischenformat für die PDF-Erzeugung umgewandelt wird, was dann auch wieder innerhalb einer speziellen CoverGenerator-Klasse umgesetzt würde. |
Danke für die Kommentare. Ja, die Metadaten könnten als generischer Array übergeben werden. Damit wäre die |
Ob das sinnvoll ist, hängt davon ab, wie das JSON aussieht, ob es nur für den Latex-Generator Sinn macht, oder ob es allgemein genug ist auch als Grundlage für andere Generatoren zu dienen. |
Ich glaube am wichtigsten ist im Augenblick, dass die beiden Klassen, |
Issue #53 macht auch noch mal klar, dass genau überlegt werden muss, was die Rolle der einzelnen Klassen ist. |
Die Interfaces
CoverGeneratorInterface
undPdfGeneratorInterface
sind sehr ähnlich. Ziel ist es ja die Methode zum Generieren von PDFs mit Cover austauschen zu können. Dazu sollte man in der Konfiguration eine Klasse und evtl. beliebige Optionen angeben können.Vielleicht sollte die Klasse
DefaultCoverGenerator
als Basisklasse dienen und vonDefaultPdfGenerator
(eigentlich "LatexPdfGenerator") erweitert werden. Dann kann der "CoverGenerator" ausgetauscht werden. Im ursprünglichen Entwurf des Designs war der "PdfGenerator" eine separate Klasse, aber da die Implementation ja nicht generisch ist und anderswo wiederverwendet werden kann, macht die Auftrennung wenig Sinn.PdfGeneratorFactory\Interface
würden verschwinden, wenn die konkrete Implementation, die Basisklasse erweitert. Die KlasseDefaultCoverGenerator
sollte dann inAbstractCoverGenerator
umbenannt werden.Als Use-Case sollte im Kopf behalten werden, dass die Latex-basierte Generierung durch HTML/CSS oder eine andere Technik ersetzbar sein soll. Wie kann man den Konfigurations- und Entwicklungsaufwand in diesen Fällen minimieren?
The text was updated successfully, but these errors were encountered: