В настоящее время я выполняю рефакторинг консольного приложения, основная обязанность которого заключается в создании отчета на основе значений, хранящихся в базе данных.
Способ создания отчета до следующего момента:
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 позаботиться о рендеринге. Он превратил ужасный код, похожий на код выше, в две-три элегантных линии благости.
Кто-нибудь знает подобный способ создания html для этого отчета без жесткого кодирования html?