2010-07-12 5 views
0

J'ai intranet win.forms (cliquez une fois) application avec module de rapport intégré personnalisé (40+ WinWord & rapports Excel). Le module est dans un assemblage séparé et extrait via des interfaces. Nous avons des sources et continuons de l'appuyer.Aide refactor module de rapport personnalisé hérité

interfaces communes ressemblent:

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

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

ReportInfo décrit les informations de base & paramètres requis. L'interface utilisateur est générée automatiquement pour permettre à l'utilisateur de choisir les paramètres du rapport.

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

et ReportResult fournit une représentation du rapport binaire ainsi que le type binaire (est-il Word2003, Excel2003, e.t.c)

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

Il n'y a pas d'exigences d'authentification et Word/Excel représentation est le must. Le PDF n'est pas le bienvenu. Problème: à chaque fois qu'un rapport est ajouté/corrigé, nous mettons à jour le module de reporting et publions la nouvelle version de l'application (car ils sont liés).

Je veux:

  • éviter de nouvelles versions d'application lorsque les rapports sont mis à jour.
  • Nous devons également ajouter une interface Web intranet à la création de rapports.

Je vais factoriser le code présente de la manière suivante:

  • fonctionnalité de reporting Extrait en service WCF séparé
  • placer des fichiers de modèle de rapport (Excel & modèles de mots) sur requête et au dossier accessible uniquement au service de reporting.
  • Le nouveau service WCF fournira des interfaces d'introspection (quels rapports sont présents et quels paramètres sont requis) et la méthode pour récupérer la représentation de rapport binaire (word ou excel)
  • Deux clients doivent communiquer avec le service WCF: Win.Forms pour client actuel et Web un. Le client fournira une interface UI de navigation de rapports pour permettre à l'utilisateur de remplir les paramètres et de recevoir le fichier de rapport. Le client Win.Forms exécutera WinWord ou Excel pour afficher le rapport reçu.

Que pensez-vous de cela?

Répondre

1

Tout d'abord: intranet win.forms? Parlez-vous d'une application WinForms de ClickOnce, d'une application WinForms hébergée par MSIE, d'un WinForms avec un navigateur Web intégré ou de quelque chose d'encore plus exotique? Je vais supposer que vous avez réellement un magasin de données central, car sinon votre interface web intranet ne se produira pas ...

Cela dépend vraiment des interfaces de vos services WCF (ou de quelque façon que vous choisissez de héberger et interfacer votre logique de service). Vous ne les avez pas vraiment décrits. Quelques questions à se poser:

  1. Est-ce un service purement basé sur des données, ou fait-il du traitement d'interface utilisateur?Le plus de ces derniers, le pire soutien pour les rapports Office et Web simulatenuously ... à un extrême, vous devrez avoir deux versions de chaque rapport. Et puis, que se passe-t-il lorsque vous souhaitez ajouter, par exemple, versions web distinctes pour les interfaces mobiles?
  2. Dans quelle mesure pouvez-vous découpler les rapports des services? Les mêmes services peuvent-ils prendre en charge plusieurs rapports?
  3. Les interfaces de données sont chunky ou bavard? Les interfaces volumineuses ont tendance à mieux évoluer, mais vous payez le prix avec des requêtes simples (puisque vous devez transmettre plus de données que la plupart des rapports ont besoin).
  4. Avez-vous des exigences d'authentification et d'autorisation utilisateur? Existe-t-il des rapports ou des données que seuls certains utilisateurs sont autorisés à voir?
  5. WinWord et Excel sont-ils une exigence ou un héritage? Les utilisateurs ont-ils vraiment besoin de documents modifiables: dans le cas contraire, l'interface Web suffirait-elle, ou un service fournissant des fichiers PDF? D'une manière générale, Bureau de l'intégration n'est pas toujours l'option la plus facile prise en charge, en particulier une fois que le prochain pack version Office ou le service que vous frappe, ou les utilisateurs finaux commencer à jongler avec leurs modèles ...

Ce qui me préoccupe est un peu que vous permettez au service WCF de connaître et même de gérer les fichiers de modèles de rapports (répertoire de modèles, interfaces d'introspection). Pourquoi? Ne serait-il pas plus propre de faire dépendre les modèles uniquement d'un service de récupération de données? N'avez-vous pas cette relation avec les rapports web de toute façon?

+0

Merci pour la réponse. J'ai fourni quelques détails, s'il vous plaît, regardez-le. –