2010-03-04 4 views
1

Je vais avoir un certain niveau de difficulté à architecturer une solution particulière avec certains éléments de données dynamiques ....architecture de données dynamique WPF

J'ai deux endroits où je suis le stockage des données - un base de données et un pdf (bien que j'écrive seulement au pdf - je ne lis jamais de lui). Vous pouvez penser au pdf fonctionnant beaucoup comme une base de données - excepté que les schémas pour le tableau et le pdf sont différents. Différents champs iront dans la base de données et le pdf. Les utilisateurs pourront éditer certains champs - mais pas tous. J'essaie d'imposer une séparation de l'IU et de la logique ici, mais je rencontre des difficultés. Ma logique consiste essentiellement à dire à mon interface utilisateur quels éléments de l'interface utilisateur créer et quelles restrictions les appliquer (requis, options, etc.), donc je me sens un peu comme si je faisais une interface utilisateur à partir de ma logique métier; mais je ne sais pas vraiment comment faire cela avec des éléments de données dynamiques. Lorsque cela est fait, je dois écrire dans la base de données et ensuite imprimer le pdf.

Vous pouvez essentiellement penser à cette question comme ... «J'ai une tonne de données disparates, je dois faire différentes choses avec différentes données, je ne peux pas trouver un moyen de le faire génériquement sans faire une certaine atrocité de codage. " Quelqu'un a-t-il une idée?

+0

Voyant que vous utilisez WPF, je suppose que vous travaillez déjà avec C# 3 et .NET 3.5. Travaillez-vous également avec MS-SQL Server? –

Répondre

0

Si j'étais vous, je voudrais regarder toutes les informations sur les champs que les utilisateurs doivent voir/éditer, et voir quels sont les thèmes communs que je peux voir. En regardant votre question, je voudrais probablement créer une classe/structure qui contient les éléments suivants:

struct FieldInfo 
{ 
    string FieldName; 
    string DisplayName; 
    string DataType; 
    bool Required; 
    delegate Validator; 
    string OldValue; 
} 

delegate bool Validator(string input, out string message); 

je retournerais FieldInfo [] de la logique d'entreprise, puis dans l'interface utilisateur utiliser ce tableau pour déterminer ce qu'il faut montrer à l'utilisateur. De cette façon, même le login de validation est le log de votre entreprise (utilisant le délégué) et l'interface utilisateur doit seulement décider quels éléments afficher pour chaque type. Vous pouvez même aller plus loin et avoir la structure FieldInfo avec un nom d'élément indiquant à l'interface utilisateur quel élément utiliser pour ce champ (Textbox, DDL, etc.)

+0

C'est à peu près ce que j'ai fait; ça semblait juste un peu un hack. Merci quand même. – Aaron

1

Ce que vous faites est de développer un framework d'application, pas un application. Vous pourriez bénéficier d'autres cadres d'application (il y en a un milliard) pour voir comment les autres ont abordé le problème.

Je peux vous dire dès maintenant que votre projet sera réussi en proportion directe de la façon dont vous avez conçu le schéma de gestion de la métainformation. La règle générale de Steve McConnell selon laquelle les données sont plus faciles à déboguer que le code est à peu près la balise guide pour ce type de projet. WPF est vraiment, vraiment bien adapté pour ce genre de chose. J'ai porté mon propre framework d'application de Windows Forms à WPF et je suis un peu étonné de voir combien de code je n'ai pas à écrire.

+0

L'application de certaines règles sur ce qui peut arriver à certains bits de données est correcte et n'a rien à voir avec la présentation; oui, vous aurez besoin d'une présentation de somekind - mais il est raisonnable de s'attendre à ce que la couche logique dicte ces règles. –

Questions connexes