2009-05-19 9 views
6

ここ数年、シーサイドを使用したことがありますが、私はテンプレートシステムが悪臭コードであることを発見しました。 html、css、およびjavascriptを生成するためのSeasideキャンバスシステムに似た何かを使用して.net用のフレームワークがありますか?あるいは、私がテンプレートで見つける傾向のある重複を避ける方法。.NET用HTMLジェネレータ?

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

、それは次のようになります(キャンバスは、HTML [とJavaScript]のビルダーです)

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

をこの方法では、私が最初に

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

2つのサブルーチンを呼び出します

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

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

答えて

4

私は(ASP.MVC: Implementing a non-templated view engine?を参照してください)のテンプレートシステムについて同様の感情を持っているし、少し試した後、私は次のようなアプローチを取った:

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

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

  • あなたはまだ結果が自動フォーマット(インデントで再利用性、継承、カプセル化...
  • HTMLのコントロールを維持します、XHTMLなど)
  • 他にも、別のDSLを使ったテンプレートスクリプトはありません。
3

何か関連があります - - これはC#ベースの内部DSLです。 ASP.NET MVCだけでなく、ASP.NET MVCでも使用できます。 今はHTMLの生成のみをサポートしています。次のリリースではCSSサポートも予定されています。

+0

はい、これは適切なアプローチのようです。あなたは前にシーサイドを使ったのですか、それとも常識ですか? –

関連する問題