zoukankan      html  css  js  c++  java
  • DDD:策略模式如何结合动态表达式

    企业应用中我们经常会遇到各种业务规则,针对这种规则,我们多数情况会采用策略模式,每种策略对应一个具体类和一个具体的配置界面。但是企业业务的规则经常变化,现有的策略随着时间的推移而不能满足要求,针对这种情况我们可以用动态表达式来解决。

    动态表达式:在静态语言中动态的执行代码,目前可选的技术有:动态编译、Iron、Roslyn、内嵌小语言。

    今天来测试一下内嵌Javascript:

    代码如下:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 using Noesis.Javascript;
     8 
     9 namespace JavascriptStudy
    10 {
    11     class Program
    12     {
    13         static void Main()
    14         {
    15             var 用户 = new 用户
    16             {
    17                 年龄 = 20,
    18                 工龄 = 5
    19             };
    20 
    21             Console.WriteLine(new 自定义计算公式().计算基本工资(用户));
    22         }
    23     }
    24 
    25     internal interface I基本工资计算
    26     {
    27         Decimal 计算基本工资(用户 用户);
    28     }
    29 
    30     internal class 自定义计算公式 : I基本工资计算
    31     {
    32         public decimal 计算基本工资(用户 用户)
    33         {
    34             var context = new JavascriptContext();
    35 
    36             context.SetParameter("用户", 用户);
    37 
    38             const string expression = @"用户.工龄 * 200."; //真实项目从数据库获取
    39 
    40             var result = context.Run(expression);
    41 
    42             if (result is int)
    43             {
    44                 return (int)result;
    45             }
    46 
    47             return (decimal)(float)result;
    48         }
    49     }
    50 
    51     internal class 用户
    52     {
    53         public int 年龄 { get; set; }
    54 
    55         public int 工龄 { get; set; }
    56     }
    57 }
  • 相关阅读:
    php 高级 提高PHP代码的性能10条建议
    CSRF预防手段
    如何在PHP中防止SQL注入
    网络安全 如何防范 XSS 攻击
    php 算法知识 冒泡排序
    php 基础知识 常见面试题
    MySQL高级 InnoDB 和 MyISAM 的区别
    php 算法知识 猴子选大王
    MySQL高级-索引1
    [POI2007]POW-The Flood(并查集)
  • 原文地址:https://www.cnblogs.com/happyframework/p/2993989.html
Copyright © 2011-2022 走看看