2


0

この質問は、委任先のベストプラクティスに関する以前の経験がないため、質問されています

私はhtmlの順不同リストを持っています、そこでは構造は私のサイトを通して同じです、しかしリストの内容は異なるかもしれません。

例:オブジェクトAのリスト

A.someMember1 A.someMember2 A.someMember3

オブジェクトBのリスト

B.someMember1 B.someMember2 B.someMember3 B.someMember4

私は2人の代表を作成しました:

保護されたデリゲートvoid RenderHtmlMethod(HtmlTextWriter writer);プロテクトデリゲートvoid RenderHtmlMethodWithObjects(HtmlTextWriterライター、オブジェクトobj);

そして以下の方法

プライベートvoid RenderList(HtmlTextWriterライター、文字列のタイトル、RenderHtmlMethod headingDelegate、RenderHtmlMethodWithObjects itemsDelegate、オブジェクトobjToRender)

writer.RenderBeginTag(HtmlTextWriterTag.Fieldset);

writer.RenderBeginTag(HtmlTextWriterTag.Legend); writer.HtmlEncode(title); writer.RenderEndTag(); // end凡例

writer.AddAttribute(HtmlTextWriterAttribute.Class、 "resultList"); writer.RenderBeginTag(HtmlTextWriterTag.Ul); {headingDelegate(作家);

itemsDelegate(writer、objToRender); writer.RenderEndTag(); // ul

writer.RenderEndTag(); //フィールドセット

}

このようにして、見出しを埋め込むメソッド(ulを埋め込んだ別のli)を作成してから、オブジェクトの各リストに必要なリスト項目をレンダリングすることができます。

クラスを定義し直してインターフェイスを実装することはできませんが、クラスのラッパーを作成し、そこでrenderメソッドを実装することはできます。 これについてどう思う?

私の構造は意味がありますか? それとも私は異常ですか?

3 Answer


4


それは悪い決断ではないと思います。 ただし、リストを生成するために使用される特別なインタフェース(または抽象クラス)を作成することをお勧めします。

public abstract class ListRenderer {public abstract IEnumerable Items {get;} public abstract String GenerateHeaderText(); public String GenerateItemText(objectItem); public abstract void RenderList(TextWriterライター); }

それから、具象アイテムの周りにラッパーを作成し、このオブジェクトをジェネレータメソッドに渡します。 リストが一般的な方法で作成されている場合は、ListRenderer内にすべてのロジックを実装してからGenerateHeaderTextとGenerateItemTextのみをオーバーライドすることが可能です。