Frage

Ich bin mit dem WMD Abschlags-Editor in einem Projekt für eine große Anzahl von Feldern, die auf eine große Anzahl von Eigenschaften in einer großen Anzahl von Entity-Klassen entsprechen. Einige Klassen können mehrere Eigenschaften aufweisen, die den Abschlag benötigen.

Ich bin Speichern des Abschlags selbst, da dies macht es einfacher, später die Felder zu bearbeiten. Ich brauche aber später auf die Eigenschaften in HTML für die Anzeige zu konvertieren. Die Frage ist: gibt es einige Muster, das ich benutzen kann, schreiben Abschlag Conversion-Code in all meinen Entitätsklassen zu vermeiden

Ich habe eine Utility-Klasse mit einer Methode, die eine Abschlag Zeichenfolge akzeptiert und gibt die HTML. Ich verwende markdownj und das funktioniert gut.

Das Problem ist, für jede Eigenschaft von jeder Klasse, den Abschlag speichert ich eine andere Methode benötigen, die in HTML konvertiert:

public class Course{

     private String description;
     .
     .
     .
     public String getDescription(){
          return description;
     }

     public String getDescriptionAsHTML(){
          return MarkdownUtil.convert(getDescription());
     }
     .
     .
     .
 }

Das Problem ist, dass, wenn der Kurs Klasse 2 weitere Eigenschaften Tuition und Voraussetzungen sagen, dass beide Wandler müssen dann werde ich getTuitionAsHTML schreiben () und getPrerequisiteAsHTML ().

Ich finde, dass ein bisschen hässlich und würde gerne eine sauberere Lösung. Die Klassen, die dies erfordern, sind nicht Teil einer einzigen Vererbungshierarchie.

Die andere Option Ich bin unter Berücksichtigung tut dies in der Steuerung und nicht das Modell. Was sind Ihre Gedanken dazu?

Danke.

[EDIT]: Neue Gedanken (Danke Jasper). Da das Projekt struts2 verwendet (ich habe das nicht vor sagen) ich eine Ansicht Komponente sagen schaffen könnte, dass der Abschlag für mich umwandeln. Dann benutze ich, dass, wo immer ich brauche den Wert als HTML angezeigt werden soll.

War es hilfreich?

Lösung

  

Die Klassen, die dies erfordern ist nicht Teil einer einzigen Vererbungshierarchie.

Sie sollten zumindest eine gemeinsame Schnittstelle implementieren, sonst mit einer sauberen generischen Lösung kommen wird mühsam sein.

  

Die andere Option Ich bin unter Berücksichtigung tut dies in der Steuerung und nicht das Modell. Was sind Ihre Gedanken dazu?

Dies ist eindeutig eine Verantwortung der Ansicht. Die # 1 MVC Regel ist, dass das Modell nicht um seine Darstellung schert, der Abschlag in diesem Fall.

Allerdings glaube ich, dass es zu wenig Details über Ihre aktuelle Architektur ist eine sinnvolle Antwort auf Ihre Frage zu geben.

Andere Tipps

Sie tun dies zu tun eine Option, wenn Sie keine Vererbung oder eine Schnittstelle verwenden können. Ich weiß, ich weiß, Umgestalten, aber das ist die Realität und * Hit passiert.

Sie können mit Reflexion Ihre Eigenschaften iterieren und die Formatierung für sie gelten. Entweder konnte sie mit einem Attribut markieren, oder Sie können ein Benennungsschema (spröde, aber immer noch eine Option genannt).

Das Ignorieren der architektonischen Probleme, ich denke, die einfache Antwort sein könnte:

public String getDescription(MarkDownUtil converter)
{
    if (converter == null) return description;
    else return MarkdownUtil.convert(description);
}

Noch besser wäre es zu machen MarkDownUtil IStringConverter implementieren, und man konnte haben verschiedene StringConverters für verschiedene Aufgaben.

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