7

過去数年間Seasideを使用してきたので、テンプレートシステムは悪いコードの臭いであることがわかりました。html、css、javascriptを生成するためにSeasideキャンバスシステムに似たものを使用する.netのフレームワークはありますか?または、テンプレートで見つけがちな重複を回避する方法。

[編集]NHamlは私が探しているものに近づいていません。重要なのは、(X)HTMLの省略形ではなく、コードをリファクタリングして再利用できるプログラミング言語を使用することです。

Seasideでは、次のようになります:(キャンバスはhtml [およびjavascript]のビルダーです)

renderContentOn: canvas
    canvas form
        class: 'eventEditor';
        with:[
            self renderWhoOn: canvas;
                 renderButtonsOn: canvas]

このメソッドでは、2つのサブルーチンを呼び出します

renderWhoOn: canvas
self decorateDivAndLabel: 'Who' on: canvas around: [
    canvas select
        id: tagId;
        selected: model who;
        list: model whoList;
        callback: [:value | model who: value]]

1つ目は、選択したフォーム要素の周りにデコレータを呼び出します。

decorateDivAndLabel: aString on: canvas around: aBlock
canvas div: [
    canvas label
        for: (tagId := canvas nextId);
        with: aString,':'.
    aBlock value]

これにより、ほとんどすべての重複を排除できます。

4

2 に答える 2

6

テンプレートシステムについても同様の感覚があり(ASP.MVC:テンプレート化されていないビューエンジンの実装?を参照)、少し実験した後、次のアプローチを取りました。

  • ストリームに直接書き込まない流暢なHTMLジェネレーターC#クラスを実装しました。代わりに、HTMLページ全体をメモリ内のオブジェクト階層として構築します。
  • 高レベルの(再利用可能な)HTMLコード(複雑な入力コントロールなど)は、個別のクラスとして実装され、ノードとしてこの階層に挿入され、プレーンなHTMLノードに自動的に拡張できます。
  • MVCビューは、HTML階層を構築して応答ストリームに書き出すPOCO C#クラスです。

いくつかの利点(私の観点から):

  • HTMLの制御は引き続き保持されます
  • 再利用性、継承、カプセル化...
  • 結果は自動フォーマットされます(インデント、XHTMLなど)
  • そして何よりも...別のDSLを使用したテンプレートスクリプトはありません。
于 2009-05-23T04:14:50.387 に答える
1

私はSeasideに精通していませんが、ASP.NET MVCでさまざまなビューエンジンを使用できます(例: NHaml)。おそらく、それらを評価して、ニーズに合うかどうかを確認できます。

独自のビューエンジンを作成することもできます。

于 2009-05-19T17:00:46.953 に答える