角度应用的业务规则引擎

时间:2018-05-12 16:01:01

标签: angular business-rules

我目前正在设计一个销售应用程序(Angular 6 + Bootstrap)作为其中一个电信运营商的响应式应用程序,我的系统用户是每天访问系统以进行销售活动的10K以上的用户。我有很多业务规则需要有时顺序运行,有时并行运行,有时需要运行客户端业务规则,有时基于Web服务调用REST运行。

在另一个应用程序(HTML5& JQUERY)中,我们使用了一个手动设计的动作链概念,链中的每个动作都将HTML元素作为输入并开始应用逻辑然后转发到下一个动作或者失败并结束链条。

我的问题是如何在链概念中应用Angular应用程序中的业务规则,考虑到整个后端是RESTful Web服务。?

2 个答案:

答案 0 :(得分:0)

感谢您的支持..

我已经像OOP一样手动开发了我的操作/验证,Angular控制器将管理运行操作列表(如果存在)。

答案 1 :(得分:-1)

如您在示例场景中所述,实现检查的一种方法是:

首先,我们假设规则1,2和3是独立的,应该并行检查:

请注意,在Angular中调用API的正确方法是service

let checkNumber1 = this.http.post('https://example.com/api/checkNumber', { mobileNo: '0123920802' });
let checkNumber2 = this.http.post('https://example2.com/api/checkNumber', { mobileNo: '0123920802' });
let checkOutstanding = this.http.post('https://example.com/api/checkOutstanding', { userId: 23910231 });

forkJoin([checkNumber1, checkNumber2, checkOutstanding]).subscribe(results => {
    // results[0] is our result from checkNumber1
    // results[1] is our result from checkNumber2
    // results[2] is our result from checkOutstanding
    if (results[0] && results[1] && results[2]) {
        // if all checks return true 
        proceed();
    } else {
        error();
    }
});

如果您想按顺序进行检查,一种可能的方法是:

checkNumber1.subscribe((result) => {
    if (result) {
        checkNumber2.subscribe((result) => {
            if (result) {
                checkOutstanding.subscribe((result) => {
                    if (result) {
                        proceed();
                    }
                });
            }
        });
    }
});