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 }

免责声明:文章转载自《DDD:策略模式如何结合动态表达式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Spring中三个注解@PathVariable、@Param和@RequestParam间的区别icmp port unreachable下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

VC下动态库dll,静态库lib的编写和使用方法

在一些项目中,考虑到系统的安全性和稳定性,经常要封装一些DLL或者LIB库供别人使用,那么怎么制作DLL或者LIB文件呢?今天特酷吧根据自己的实际情况给大家讲解下基本的制作方法。以下是我亲自操作的记录:1,动态库dll的编写方法:新建一个动态链接库:填好工程名称即可选择工程类型,如果没有特别的要求,选择一个空工程即可。会看到这里和标准的控制台工程一样,没有任...

深入了解Java ClassLoader、Bytecode 、ASM、cglib(II)

三、ASM 我们知道Java是静态语言,而python、ruby是动态语言,Java程序一旦写好很难在运行时更改类的行为,而python、ruby可以。 不过基于bytecode层面上我们可以做一些手脚,来使Java程序多一些灵活性和Magic,ASM就是这样一个应用广泛的开源库。 ASM is a Java bytecode manipulation...

动态修改spine动画渲染层次

在unity中做2D游戏开发的时候我们使用sprite比较多,sprite的层次修改我们手动修改sprite renderer下面的Order in Layer属性就行了。也可以动态的获取它的层次属性进行修改,那么怎么动态修改spine动画的层次呢,如下:  我们创建spine动画的时候,在这个物体上会有一个Mesh Renderer的组件。我们通过...

[SAP ABAP开发技术总结]动态语句、动态程序

  在ABAP中写动态的程序,灵活的程序,一定要知道的 1.13.         动态语句... 22 1.13.1.     内表动态访问... 22 1.13.2.     动态类型... 23 1.13.3.     动态SQL. 23 1.13.4.     动态调用类的方法... 23 1.13.5.     ASSIGN 动态分配... 2...

策略模式(strategy pattern)

策略模式在java集合中的TreeSet和TreeMap中得到了很好的应用,我们可以实现Comparator接口实现Compareto()方法来定义自己的排序规则,然后通过TreeSet,TreeMap构造方法传入实现该接口的实例,map中的顺序就会是我们自定义的顺序。我们可以完全定义自己的规则,用之极为方便。那么,什么是策略模式呢? 策略模式定义:定...

EFcore与动态模型(三)

紧接着上面的内容,我们继续看下动态模型页面交互实现方式,内容如下: 1,如何实现动态表单 2,如何接收表单数据并绑定到动态模型上 一、如何实现动态表单 由于模型信息都是后台自定义配置的,并不是固定不变的结构,所以没有办法直接在页面上写出对应的表单数据,而需要通过解析模型的结构,动态的生成对应的表单。在说具体实现方法前,我们先来看下我们想要达到的效果。 Ht...