この提案されたソリューションは、現在のようにデータソースを単にコードテンプレートに関連付けるよりも、維持することはできません。実際には、テンプレートスキーマとレンダリング情報をデータベースにプッシュすることによって柔軟性を失い、アプリケーションのメンテナンスを難しくしていると言っても過言ではありません。
例えば、(私はこれを正しく理解していた場合)あなたが属性を持つこれらのデータソースがあると仮定してみましょう:あなたは、あなたの検索結果にこれらのデータソースのそれぞれの一方を有することができる
Document { Author, DateModified }
Picture { Size, Caption, Image }
Song { Artist, Length, AlbumCover }
。各要素は別々にレンダリングされます(ピクチャは左に固定されたプレビュー画像でレンダリングされるか、ソングはアルバムカバーなどを表示できます)
提案されたデザインのレンダリングを見てみましょう。レンダリングのデータベースを照会し、出ているHTMLを調整します。たとえば、ドキュメントの緑の背景とピクチャの青の背景が必要な場合があります。議論のために、あなたが実際にSongのための3つの背景色、Pictureのための2つの色、そしてDocumentsのための3つの背景色を本当に必要としていると考えてみましょう。ここでは、レンダリング値を適用するパラメータ化されたテンプレートを変更するだけでなく、プロモートおよびプッシュされるデータベーススキーマの変更についても検討しています。
ドキュメントの結果にドロップダウンコントロールが必要で、ピクチャにはいくつかのボタンが必要で、ソングにサウンドプレーヤーのコントロールが必要であると判断したとします。今すぐデータソースごとの各テンプレートが大幅に変更されるので、開始した場所に戻ることができます。
柔軟性が失われたのでデータソースごとに異なるテンプレートを定義します。あなたが失うもう1つの点は、テンプレートをソース管理でバージョン管理していることです。
放出されたビューで共通の要素/コントロールを再利用する方法を検討しますが、テンプレートとデータソースの間のファクトリでマッピングを保持し、テンプレートをデータソースごとに別々のファイルとして保持します。CSSや同様の設定でレンダリングを維持してください。マッピングを単純なXMLファイルとしてエクスポートすることを検討して、メンテナンスを容易にします。新しいデータソースを展開するには、マッピングを追加し、適切なテンプレートとCSSファイルを作成して、それらを予定された場所にドロップするだけです。以下のコメントへ
応答:
あなたは出力に与えられたテンプレートをロジックを持つ
switch (resultType)
{
case (ResultType.Song):
factory = new SongResultFactory();
template = factory.BuildResult();
break;
// ...
を:
私は、単純なswitch文で十分です意味。あなたが長いswitch文よりもコンパクトな何かをしたい場合は、このように、辞書内のマッピングを作成することができます。
:
IDictionary<ResultType, ResultFactory> TemplateMap;
mapping = new Dictionary<ResultType, ResultFactory>();
mapping.Add(ResultType.Song, new SongResultFactory());
// ... for all mappings.
を代わりにswitch文の後、あなたはこのワンライナーを行うことができます
template = TemplateMap[resultType].CreateTemplate();
主な議論は、ある時点では、データベース、大きなswitch文、またはこのIDictionaryインスタンスのいずれかを初期化する必要があるということです。
あなたはさらにそれを取ると中に読んだ、単純なXMLファイルでマッピングを格納することができます:
<TemplateMap>
<Mapping ResultType="Song" ResultFactoryType="SongResultFactory" />
<!-- ... -->
</TemplateMap>
と反射らを使用しています。 al。 IDictionaryにデータを設定します。あなたはまだマッピングを維持していますが、今は展開が容易なXMLファイルになっています。
説明を再度ありがとう。別の目と意見を得ることはいつも良いことです!あなたの考えは私にいくつかの考えを考えさせてくれました。再度、感謝します。 - ロバート –