私は現在、データベースに保存されている値に基づいてレポートを生成することを主な役割とするコンソール アプリケーションをリファクタリングしています。
私が今までレポートを作成してきた方法は次のとおりです。
const string format = "<tr><td>{0, 10}</td><td>
{1}</td><td>{2, 8}</td><td>{3}</td><td>{4, -30}</td>
<td>{5}</td><td>{6}</td></tr>";
if(items.Count > 0)
{
builder.AppendLine(
String.Format(format, "Date", "Id", "WorkItemId",
"Account Number", "Name", "Address", "Description"));
}
foreach(Item item in items)
{
builder.AppendLine(String.Format(format, item.StartDate, item.Id,
item.WorkItemId, item.AccountNumber,
String.Format("{0} {1}",
item.FirstName, item.LastName),
item.Address, item.Description));
}
string report = String.Format("<html><table border=\"1\">{0}
</table></html>",
builder.ToString());
(上記は単なるサンプルです...書式設定については申し訳ありません...横スクロールを必要としないように書式設定しようとしました....)
私は本当に私がこれをした方法が好きではありません。それは機能し、今のところ仕事をしています...しかし、私はそれが保守可能だとは思いません...特に、作成する必要があるhtmlに関してレポートがさらに複雑になる場合. さらに悪いことに、私のチームの他の開発者は、HTML レポートを生成するアプリケーション用に私のコードをコピー アンド ペーストし、ひどい混乱を引き起こす可能性があります。(私はすでにそのような恐怖が生み出されるのを見てきました!レポートの詳細を取得するために数百行のハードコードされた SQL を含むレポート関数を想像してみてください...それは大人の男を泣かせるのに十分です!)
しかし、私はこれがまったく好きではありませんが...私はそれを行う別の方法を考えることはできません.
確かにこれを行う方法があるに違いありません...私はそれを確信しています。少し前まで、aspx ページでテーブルを生成するときに同じことをしていましたが、オブジェクトをコントロールにバインドして .NET にレンダリングを任せることができることを誰かが親切に教えてくれました。上記のコードに似たひどいコードが、2 ~ 3 行のエレガントなコードに変わりました。
HTMLをハードコーディングせずに、このレポートのHTMLを作成する同様の方法を知っている人はいますか?