Нужны указатели для написания расширяемого механизма отчетности - PullRequest
1 голос
/ 27 декабря 2011

Разочарованные текущими ограничениями предложения отчетности (SSRS, Crystal Reports) и моими пользователями, в основном финансовыми / деловыми людьми, знакомыми с Excel, я подумываю написать свой собственный механизм отчетов с использованием компонента Excel, такого как SpreadsheetGear или Aspose.Cells, и интегрировать его в наше приложение WinForms.

Обе библиотеки предлагают компонент WinForms для просмотра электронных таблиц, поэтому сгенерированный отчет электронной таблицы будет показан пользователю в форме после сохранения его параметров, после чего он сможет его сохранить.

Я сделал это в отдельном проекте winforms, и это очевидно просто. Просто поместите элементы управления параметрами в форму, подключитесь к базе данных, сгенерируйте электронную таблицу, и все готово.

Однако выполнение этого для каждого отчета, очевидно, повлечет за собой значительное дублирование «стандартного» кода и дизайна формы и снижает удобство обслуживания и возможность обновления приложения.

В связи с этим я рассматриваю возможность написания отчетов в виде плагинов (DLL), которые будут предоставлять только код / ​​логику для генерации отчета и будут возвращать конечный объект рабочего листа вызывающей стороне (форма «Предварительный просмотр отчета»).

Подумав, я думаю, что обязанности между вызывающим абонентом и надстройкой будут распределены следующим образом:

DLL / надстройка отчета предоставит вызывающей стороне (главному пользовательскому интерфейсу) список параметров, которые пользователь должен передать для этого отчета, вместе с его именем, его возможными значениями (списком со списком, для пример).

После этого главный пользовательский интерфейс будет создавать их в форме. Тип элемента управления будет выведен на основании типа данных параметра (строка будет TextBox и т. Д.).

Главный пользовательский интерфейс будет передавать в DLL-отчет отчета заполненные параметры в метод генерации отчета вместе с некоторыми специфическими настройками приложения (строка подключения, имя пользователя приложения).

Затем библиотека отчетов DLL сгенерирует отчет и вернет в главный пользовательский интерфейс сгенерированный объект листа / отчета и отобразит его в элементе предварительного просмотра.

Чтобы достичь этого технически, я считаю, что мне нужно создать интерфейс для моих библиотек отчетов и реализовать такие методы, как

List<ReportParameter> GetReportsParameters()
Report GenerateReport()

Из основного интерфейса я бы получал к ним доступ и вызывал их через Reflection.

Похоже ли это на хорошую стратегию и оставляет ли она приличное пространство для расширения в будущем? Я хотел бы добиться хорошего баланса между модульностью, не ограничивая при этом гибкость, поскольку моя архитектура надстроек слишком статична для будущего.

Не могли бы вы дать несколько полезных советов, чтобы убедиться в этом, и поделитесь, если вы достигли подобных результатов в прошлом?

Спасибо.

(Я занимаюсь разработкой на C #, .Net 4.0 и WinForms. Серверная часть базы данных - SQL Server 2005).

1 Ответ

0 голосов
/ 27 декабря 2011

Взгляните на Templater . Он, вероятно, уже делает большинство вещей, которые вы хотите.

Есть примеры из реальной жизни Github .

Отказ от ответственности: я автор библиотеки.

...