Question

la question est peut-être composite, laissez-moi l'étendre:

  • fait qu'il existe un pour créer et / ou des règles basées concepteur (stub / cadre / méta-concepteur) basé sur l'objet .NET propriétés booléens public? Enregistré comme tout DSL / Boo / ... sortie.
  • est-il possible de compiler le sortie DSL en C # expressions?

Notre principal problème est l'écart entre la documentation et le code. Notre produit basé sur des centaines de règles definied utilisateur et nous voulons accélérer les demandes de modification.

Si nous sommes en mesure de donner un styl aux utilisateurs et prenez la sortie, puis après la traduction / compilation dans C # / code IL nous avons un cycle de demande de changement rapide.

Je sais que notre problème c'est spécifique, mais à des « briques dans le mur » sont les bienvenus!

Exemple :

Une classe C #, sous réserve de:

public class TestA
{
     public bool B {...}
     public bool C {...}
}

Dans le concepteur, nous devrions pouvoir créer

  • tout type de concepteurs graphiques (par exemple. Déroulant pour sélectionner les propriétés publiques)

Sortie DSL:

If TestA.B AND TestA.C Then Return True;

Sortie en C #:

if (testA.B && testA.C) { return true; }

Mise à jour # 1

Je serais heureux avec une langue DSL qui prennent en charge l'utilisation de classes .NET statiques typé. Je veux dire que si l'utilisateur peut vérifier le code ( « Sortie DSL » dans l'exemple), on n'a pas besoin du concepteur.

Mise à jour # 2

D'après les Tipp, je fixais avec des arbres d'expression. Après quelques jours je suis tombé DLinq - Je ne ai jamais été un grand fan de DLinq mais dans ce cas FITS le domaine des problèmes très bien

.
  • facile à analyser (A> B ET 2 <4) ou C = 5 dans les arbres d'expression
  • Facile à créer des expressions comme ça
  • Très facile à linéariser / désérialiser
  • interface graphique basée sur FlowLayoutPanel fonctionne bien comme "constructeur d'expression"
Était-ce utile?

La solution

Vous pouvez construire quelque chose comme ça votre auto.

Vous pouvez obtenir une liste de toutes les propriétés publiques pour une classe en utilisant Type.GetMembers ()

Cependant, au lieu de générer du code C #, j'utiliser des arbres d'expression.

De cette façon, vous n'avez pas besoin d'impliquer le compilateur C # lorsque les utilisateurs changent les règles. Au lieu de cela, vous pouvez stocker les règles dans une base de données, de les charger à l'exécution, puis utilisez la méthode Expression.Compile () pour créer un délégué, vous pouvez invoquer pour exécuter le code.

Mise à jour:

Dans la personne des commentaires a demandé: « Quelle est la différence entre l'expression Tress et le domaine des langues spécifiques? »

Voici la réponse:

Arbres d'expression et langages spécifiques de domaine sont des choses orthogonales.

Expression tress sont juste une API pour représenter C expressions #, qui peut facilement être converti en un délégué dynamiquement lors de l'exécution.

Un DSL ou domaine langue spécifique, est un langage de programmation conçu pour résoudre une classe étroite de problèmes.

Ils sont, essentiellement, des choses complètement différentes.

Vous pouvez utiliser les arbres d'expression dans le cadre d'une mise en œuvre du DSL si vous le souhaitez. Linq les utilise pour cette fin.

Dans votre cas, cependant, vous n'avez pas besoin d'un DSL. Qu'est-ce que vous avez besoin est une interface utilisateur qui génère des règles (similaires aux travaux de perspectives façon), et un moyen d'exécuter ces règles.

Création de l'interface utilisateur est tout à fait normal le développement de l'interface utilisateur.

arbres d'expression sont ce que vous pouvez utiliser pour mettre en œuvre les règles.

Autres conseils

Il est un fait peu connu que le concepteur pour Windows Workflow Foundation et son moteur de règles en particulier peut être hébergé dans une application Windows Forms séparé de Visual Studio. Les règles rédigées de cette façon peuvent même être évalués indépendamment d'un flux de travail réel.

Voir WF Guidance Scénarios: flux de travail réhébergement Designer Tutoriel:. Accueillir la WF designer

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