C# 角度复杂的财务计算/业务规则
我正在考虑用Angular开发一个SPA应用程序 我们面临的挑战之一是,当用户在表单上输入值时,我们有大量基于财务的计算。下面是一个简化的示例: 用户正在销售交易记录输入表单上输入明细行。 当他们输入净金额时,系统应计算销售额 基于输入净值的税额和总值(如我所说, 它确实变得比这更复杂)。 这里需要注意的重要一点是,当用户从“净”字段中签出时,他们应该会看到“税”和“毛”字段的更新。 因此,我在这里看到两个高级选项:C# 角度复杂的财务计算/业务规则,c#,angularjs,web-services,soa,business-logic,C#,Angularjs,Web Services,Soa,Business Logic,我正在考虑用Angular开发一个SPA应用程序 我们面临的挑战之一是,当用户在表单上输入值时,我们有大量基于财务的计算。下面是一个简化的示例: 用户正在销售交易记录输入表单上输入明细行。 当他们输入净金额时,系统应计算销售额 基于输入净值的税额和总值(如我所说, 它确实变得比这更复杂)。 这里需要注意的重要一点是,当用户从“净”字段中签出时,他们应该会看到“税”和“毛”字段的更新。 因此,我在这里看到两个高级选项: 要么用JavaScript编写此计算 打服务电话给 执行计算 无论哪种方式,我
非常感谢尽管我非常喜欢javascript,但我永远不会相信它的财务计算,尤其是在客户端 但是。这取决于你到底需要计算什么。我的意思是: 1) (您的案例)服务器为您提供“源”值(如用户数量等)和百分比(或用户输入),并且您不将此数据传递给服务器,那么您肯定可以,而且我认为应该,在客户端执行此操作
2) 如果您有类似smth的商品价格和数量,您应该在服务器上计算(您可以在UI上进行预计算),但也可以在服务器上进行确认。现在根据您提供的业务场景,您似乎不想让其他人知道它是如何完成的。计算最好保存在服务器端 当您从净金额字段中签出时,可以调用服务器获取销售税和其他计算值 你可以这样经历
你有计算销售税的方法。现在这需要一个净额。因此,当您输入净金额并在字段外添加选项卡时,您可以调用个人服务获取销售税金额和总金额。在这里,您对服务的输入不是整个客户端,而是绑定到控制器的净额。我将创建一个API端点,接收您需要的计算和值,并返回结果。这与从普通CRUD API获取一条记录相同,使角度服务变得非常简单:
angular.module('fin',[]).service('calculation', function($http) {
return {
getResult: function(calcMethod, values){
return $http({
url: 'http://backend.com/calculate',
method: 'GET',
params: {
calcMethod: calcMethod,
values: values
}
});
}
}
}
然后你可以从你的控制器打电话,类似这样:
Service.getResult('Sales Tax',[$scope.value1, $scope.value2]).success( function(res) {
$scope.result = res;
});
因此,您建议使用一个端点,该端点包含一个指定计算类型的参数,即CalcTax、CalcCurrencyTax等。?然后执行适用的计算-这看起来确实值得考虑。我面临的另一个问题是我在服务中实际在哪里进行计算?例如,我希望它是SalesTransaction实体,以便在净值的属性集上进行计算。因此,我假设在这个服务方法中,我可以创建SalesTransaction的一个新实例,设置净税率和税率,然后读取并返回计算值。我不确定我是否理解,但我只是作为控制器的一部分来做,不会将任何计算值存储在您的实体中。您只需要将SalesTransaction和用户输入提交回服务器,并且您需要在服务器端重新计算其他值,因为用户可以在客户端修改您的js对象。对于客户端,用户在某些情况下可以更改计算的税额,所以它需要是模型上的一个属性。我的最后一点是关于如何编写代码服务端来进行计算。例如,我是否在服务方法中有代码来执行此操作。或者我尝试将该逻辑放在服务器端实体/模型中(即使在进行此计算时,我不会将其保存到数据库中)。要么服务很愚蠢,只从服务器获取一个值,因此不需要计算它。或者服务器用一个公式(有点奇怪,因为您必须在DB上存储javascript公式,尽管它可能工作得很好),然后服务应用该公式,在JavaScript中使用calc并保持其私有性,这是进行服务调用并在服务器端使用此逻辑的另一个原因。