3

多数のエンティティ クラスの多数のプロパティに対応する多数のフィールドに対して、プロジェクトで WMD マークダウン エディターを使用しています。一部のクラスには、マークダウンを必要とする複数のプロパティがある場合があります。

後でフィールドを編集しやすくするため、マークダウン自体を保存しています。ただし、後で表示するためにプロパティを HTML に変換する必要があります。問題は、すべてのエンティティ クラスでマークダウン変換コードを記述しないようにするために使用できるパターンがあるかどうかです。

マークダウン文字列を受け取り、HTML を返すメソッドを持つユーティリティ クラスを作成しました。私はmarkdownjを使用していますが、これはうまくいきます。

問題は、マークダウンを格納する各クラスの各プロパティについて、HTML に変換する別のメソッドが必要になる場合があることです。

public class Course{

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

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

問題は、Course クラスにさらに 2 つのプロパティ Tuition と Prerequisites があり、両方ともコンバーターが必要である場合、getTuitionAsHTML() と getPrerequisiteAsHTML() を記述する必要があることです。

少し醜いので、よりクリーンなソリューションが必要です。これを必要とするクラスは、単一の継承階層の一部ではありません。

私が検討している他のオプションは、モデルではなくコントローラーでこれを行うことです。これについてどう思いますか?

ありがとう。

[編集]: 新しい考え (ジャスパーに感謝)。このプロジェクトは struts2 を使用しているので (これについては前に言いませんでした)、マークダウンを変換すると言うビュー コンポーネントを作成できます。次に、値を HTML として表示する必要がある場合はいつでもそれを使用します。

4

3 に答える 3

2

これを必要とするクラスは、単一の継承階層の一部ではありません。

少なくとも共通のインターフェイスを実装する必要があります。そうしないと、クリーンな汎用ソリューションを考え出すのが面倒になります。

私が検討している他のオプションは、モデルではなくコントローラーでこれを行うことです。これについてどう思いますか?

これは明らかにビューの責任です。#1 MVC ルールは、モデルがその表現 (この場合はマークダウン) を気にしないことです。

ただし、あなたの質問に意味のある答えを与えるには、現在のアーキテクチャについての詳細がほとんどないように感じます。

于 2008-10-31T16:29:55.530 に答える
1

継承またはインターフェイスを使用できない場合は、これを行うためのオプションが 1 つあります。私は知っています、私はリファクタリングを知っていますが、これは現実であり、*ヒットが発生します。

リフレクションを使用して、プロパティを反復処理し、書式設定を適用できます。それらに属性をタグ付けするか、命名スキームを採用することができます(脆弱ですが、それでもオプションです)。

于 2008-10-31T16:38:23.690 に答える
1

アーキテクチャの問題を無視すると、簡単な答えは次のようになると思います。

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

さらに良いのは、MarkDownUtil に IStringConverter を実装させることであり、さまざまなジョブに対していくつかの異なる StringConverters を持つことができます。

于 2008-10-31T16:39:36.837 に答える