Question

Ceci est la plupart du temps une demande de commentaires s'il y a une raison que je devrais pas dans cette voie.

J'ai un multi-tierd, l'application générée CodeSmith. Au niveau de l'interface utilisateur, il faut être certains champs qui sont nécessaires, et les champs requis variera en fonction des valeurs de champ dans l'entité liée. Ce que je pense à faire est d'ajouter un CustomAttribute « PropertyRequired » à chaque propriété dans les entités que je peux mettre en vrai ou faux quand je charge l'entité dans son gestionnaire. Ensuite, je vais utiliser la réflexion pour interroger la propriété et donner une rétroaction visuelle à l'utilisateur au niveau de l'interface utilisateur, et je peux confirmer que toutes les propriétés requises ont une valeur valide dans le gestionnaire avant sauver. J'ai travaillé ceci comme une preuve de concept avec une propriété en une seule entité, mais avant d'essayer de l'étendre au reste de l'application, je voudrais demander s'il y a quelqu'un avec plus d'expérience soit me dire d'aller pour elle, ou pourquoi je ne l'aime quand j'échelle. Si cela est une mauvaise idée, ou si vous pouvez proposer une meilleure approche s'il vous plaît offrir votre opinion.

Était-ce utile?

La solution

Il est une jolie façon raisonnable de le faire (je l'ai fait quelque chose de très similaire avant) - mais il y a toujours downsides:

  • un code besoin de l'entité aura besoin la référence supplémentaire (en supposant que l'attribut et l'entité sont dans différentes assemblées)
  • les valeurs (sauf si vous êtes intelligent à ce sujet) doivent être déterminées au moment de la compilation
  • vous ne pouvez pas l'utiliser sur des entités hors de votre contrôle

Dans la plupart des cas ci-dessus ne sont pas un problème. Si elles sont un problème, vous voudrez peut-être soutenir un modèle de métadonnées externes - mais à moins que vous en avez besoin, ce serait exagéré. Ne le faites pas à moins que vous devez (ce qui signifie: aller de l'avant et les attributs utilisation, ils sont habituellement fin)

.

Autres conseils

Il n'y a aucune raison inhérente pour éviter des attributs personnalisés. Il est une option CLR pris en charge qui est l'épine dorsale de nombreux produits disponibles (contrats de code, FxCop, etc ...).

Ce n'est pas une approche raisonnable et en meilleure santé que la cuisson ce genre de choses dans un niveau de l'interface utilisateur. Il y a quelques points avant de prendre une valeur compte tenu de la pleine plongée:

  • Vous couplage étroitement la logique métier avec l'entité commerciale elle-même. Y at-il des circonstances où un champ étant requis ou valeurs valides pourrait changer? Vous pouvez vous limiter ou être confronté à un mécanisme de validation incompatible
  • affectation dynamique est possible mais plus difficile - à savoir lorsque vous définissez un champ nécessaire c'est ce que ce sera à moins que vous substituez
  • Les attributs personnalisés peuvent être très rigides si plus bas la ligne que vous vouliez faire quelque chose de plus compliqué - à savoir si vous devez passer l'état dans un système de validation conduit d'attribut. Les attributs comme l'affectation déclarative. Seulement ayant un vrai / faux propriété requis ne devrait pas être un problème ici si

Le fait d'être un avocat du diable vraiment, en général pour une application assez simple où vous ne vous préoccupez champs obligatoires, cela est tout à fait bien rangé façon de le faire

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top