Помогите рефакторинг старого модуля пользовательских отчетов - PullRequest
0 голосов
/ 12 июля 2010

У меня есть интранет win.forms (клик один раз) с настраиваемым встроенным модулем отчетности (более 40 отчетов WinWord & Excel).Модуль находится в отдельной сборке и абстрагируется через интерфейсы.У нас есть источники и мы продолжаем их поддерживать.

Общие интерфейсы выглядят следующим образом:

IReportProvider {
  // introspection stuff 
  IEnumerable<ReportCategoryInfo> GetReportGroups();
  IEnumerable<ReportInfo> GetReports(Guid categoryId);
  ...

  // common function 
  ReportResult CreateReport(Guid reportId, ReportParamCollection prms, ..)
}

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

class ReportInfo {
  public Guid Id { get; set; }
  public string Title { get; set; }
  public List<ReportParameterInfo> Params { get; set; }
  ...
}

и ReportResult предоставляет двоичное представление отчета, а также двоичный тип (это Word2003, Excel2003 и т. Д.)

class ReportResult {
  public byte[] Document { get; set; }
  public ReportType DocumentType { get; set; }
  public List<string> Warnings { get; set; }
  ...
}

Требования к аутентификации отсутствуют, и представление word / excel являетсядолжен.PDF не приветствуется.

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

Я хочу:

  • избегать новых версий приложений при обновлении отчетов.
  • Мы также должны добавить веб-интерфейс интрасети к отчетам.

Я собираюсь реорганизовать текущий код следующим образом:

  • Извлечь функциональность отчетности вотдельная служба WCF
  • Удалите файлы шаблонов отчетов (шаблоны Excel и Word) из приложения и поместите в папку, доступную только для службы отчетов.
  • Новая служба WCF будет предоставлять интерфейсы самоанализа (какие отчеты присутствуют и какие параметры требуются) и метод для извлечения двоичного представления отчета (слово или excel)
  • Должно быть два клиента, которые взаимодействуют сСервис WCF: Win.Forms для нынешнего клиента и веб.Клиент предоставит интерфейс навигации по отчетам, чтобы пользователь мог заполнить параметры и получить обратно файл отчета.Win.Forms клиент выполнит WinWord или Excel, чтобы показать полученный отчет.

Что вы думаете об этом?

1 Ответ

1 голос
/ 12 июля 2010

Прежде всего: интранет win.forms? Вы говорите о приложении ClickOnce WinForms, размещенном в MSIE приложении WinForms, WinForms со встроенным веб-браузером или о чем-то еще более экзотическом? Я собираюсь предположить, что у вас на самом деле есть центральное хранилище данных, так как иначе ваш веб-интерфейс интрасети не будет ...

Это действительно зависит от интерфейсов к вашим службам WCF (или от того, какой способ вы выберете для размещения и интерфейса своей сервисной логики). Вы на самом деле не описали их. Несколько вопросов для размышления:

  1. Это сервис, основанный исключительно на данных, или он выполняет некоторую обработку пользовательского интерфейса? Чем больше последних, тем хуже поддержка Office и веб-отчетов одновременно ... в одном крайнем случае вам понадобится две версии каждого отчета. А потом, что происходит, когда вы хотите добавить, например, отдельные веб-версии для мобильных интерфейсов?
  2. Насколько хорошо вы можете отделить отчеты от служб? Могут ли одни и те же службы поддерживать несколько отчетов?
  3. Интерфейсы данных коренастые или болтливые? Коренастые интерфейсы, как правило, лучше масштабируются, но вы платите цену простыми запросами (поскольку вам нужно передать больше данных, чем требуется большинству отчетов).
  4. Есть ли у вас требования к аутентификации и авторизации пользователя? Существуют ли отчеты или данные, которые могут просматривать только некоторые пользователи?
  5. Является ли WinWord и Excel требованием или наследием? Действительно ли пользователи нуждаются в редактируемых документах: если нет, хватит ли веб-интерфейса или службы, предоставляющей файлы PDF? Вообще говоря, интеграция с Office не всегда является наиболее легко поддерживаемым вариантом, особенно когда вас поражает следующая версия Office или пакет обновления или когда конечные пользователи начинают возиться со своими шаблонами ...

Что меня несколько беспокоит, так это то, что вы даете знать службе WCF и даже обрабатываете файлы шаблонов отчетов (каталог шаблонов, интерфейсы самоанализа). Зачем? Разве не было бы чище, чтобы шаблоны зависели только от службы поиска данных? Разве вы не будете связаны с веб-отчетами?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...