Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在webapi中公开域逻辑_C#_.net_Asp.net Web Api - Fatal编程技术网

C# 在webapi中公开域逻辑

C# 在webapi中公开域逻辑,c#,.net,asp.net-web-api,C#,.net,Asp.net Web Api,所以在REST中我有一个产品资源 http://api/product 问题是,如果我有一些域逻辑怎么办?在面向对象的世界中,我可能 public class product { int id; public product(){} public int Calc(int first, int second) { return first + second; } } 如何表示此业务逻辑?我想我可以 public int Ge

所以在REST中我有一个产品资源

http://api/product
问题是,如果我有一些域逻辑怎么办?在面向对象的世界中,我可能

public class product
{
    int id;

    public product(){}

    public int Calc(int first, int second)
    {
        return first + second;
    }
}
如何表示此业务逻辑?我想我可以

    public int GetCalc(int id, int first, int second)
    {
        localProduct = products[id];
        return localProduct(first + second);
    }
因此,服务的URL将变为

http://api/product/Calc?id=1&first=1&second=2
或者(或者)


这将返回正确的结果。。。。我只是想知道这是否是我应该如何表示业务逻辑的方式?或者我应该以不同的方式来做这件事,还是试图完全避免?我欢迎任何关于如何改进这个的想法…

好吧,理论上REST不应该处理逻辑,而应该只处理状态(REST=代表性状态转移)

当然,我明白你的意思,如果我需要计算值,我该怎么办

我认为你应该尽量避免这样做

如果这是不可能的,我只会公开一个表示对象状态的ViewModel,并对外部世界隐藏带有逻辑的模型。这可以确保您执行显式转换,并且它还显式声明您发送的是对象的状态,而不是对象本身


但这基本上取决于形势,没有真正的硬性规定。我会说,现在就去做最有意义的事。如果您发现它变得笨拙,请将其重构为更好的解决方案。

好吧,理论上REST不应该处理逻辑,而应该只处理状态(REST=代表性状态转移)

当然,我明白你的意思,如果我需要计算值,我该怎么办

我认为你应该尽量避免这样做

如果这是不可能的,我只会公开一个表示对象状态的ViewModel,并对外部世界隐藏带有逻辑的模型。这可以确保您执行显式转换,并且它还显式声明您发送的是对象的状态,而不是对象本身


但这基本上取决于形势,没有真正的硬性规定。我会说,现在就去做最有意义的事。如果您发现它变得笨拙,请将其重构为更好的解决方案。

这可能在很大程度上取决于您构建的系统。花点时间想想这将如何随着时间的推移而发展,因为这是很难重构的。你前进的方向看起来不错

此API调用

http://api/product/Calc?id=1&first=1&second=2
我觉得不错。因此,您有一个
产品
控制器,它有一个方法
Calc
,并接受参数
id
第一个
第二个

我不太确定如何处理这个API

http://api/product/1/Calc?first=1&second=2

在我看来,一个
产品
有许多
id
,每个
id
都可以调用一个方法
Calc
,参数为
第一个
第二个
。也许在您的业务领域,这是有意义的,我就是看不出来。

这可能在很大程度上取决于您构建的系统。花点时间想想这将如何随着时间的推移而发展,因为这是很难重构的。你前进的方向看起来不错

此API调用

http://api/product/Calc?id=1&first=1&second=2
我觉得不错。因此,您有一个
产品
控制器,它有一个方法
Calc
,并接受参数
id
第一个
第二个

我不太确定如何处理这个API

http://api/product/1/Calc?first=1&second=2

在我看来,一个
产品
有许多
id
,每个
id
都可以调用一个方法
Calc
,参数为
第一个
第二个
。也许在你的商业领域,这是有意义的,我就是看不到。

是的。。。。我真不知道它是否真的应该是_http://api/product?id=1/Calc?first=1&second=2yeah.... 我真不知道它是否真的应该是_http://api/product?id=1/Calc?first=1&second=2