ASP.NET Web API:是否可以在一个控制器中操作多种资源

ASP.NET Web API : is it possible to manipulate multiple kinds of resources in one controller

提问人:Robin Sun 提问时间:11/11/2023 最后编辑:marc_sRobin Sun 更新时间:11/12/2023 访问量:42

问:

我们的系统采用前端网站和后端 ASP.NET Web API 设计。下面是业务场景:有一个名为 的表,它记录了一个工作会话的详细信息,例如何时开始,何时结束......当一个工作会话结束时,我们需要计算该工作人员获得的相应积分,并在表格中插入一行。WorkSessionAccounting

当工作线程在前端网站上结束一个工作会话时,它会通过 Javascript 向后端 API 发送请求。现在,我想更新表,同时在表中插入一行。WorkSessionAccounting

以前,我的理解是,一个控制器应该只针对一种资源进行设计。但是,如果我设计一个 ,它是否冗余,因为前端网站将向 Web 服务器发送两个 http 请求?AccountingController

在此处显示的代码中,我想在一个控制器的一个 PUT 方法中操作两个表。这是否违背了REST原则?

public class WorkSessionController : ApiController
{
    [HttpPut]
    public IHttpActionResult ClockOut([FromBody] WorkSessionViewModel workSessionViewModel) 
    {
       // Update the row in WorkSession table
       // Insert one row in Accounting table
    }
}
C# asp.net REST ASP.NET-WEB-API

评论

0赞 dexiang 11/11/2023
什么是重要的?您的业务逻辑还是编码规则?如果我是在客户端上工作的编码员,如果我必须请求两次,我可能会说多么愚蠢。
0赞 Robin Sun 11/11/2023
我的意思是REST规则,在一个控制器中处理两种资源。

答:

0赞 Javad J 11/11/2023 #1

这两个更新中的逻辑依赖关系如何? 如果一个请求失败而另一个请求成功,这有关系吗? 如果答案是肯定的,则必须在一个事务命令中实现这两个命令。

SRP 不是一个真假原则,因此在分离之前,您有两个独立的逻辑,这有助于您拥有更易于维护和易于阅读的代码库。

评论

0赞 Robin Sun 11/12/2023
谢谢你让我知道 SRP 不是一个真假@Javad原则。你认为将控制器命名为 WokrSessionController 是否合适,即使它操作两个资源?
0赞 Robin Sun 11/12/2023
嗨,@Javad,事实证明它们具有逻辑依赖性。那么,您建议我需要将事务放在服务层或控制器层的哪个位置?
0赞 Javad J 11/12/2023
在我看来,它应该得到业务方面的认可。企业如何知道这种行为。这种分离的一个常见示例是聚合系统日志,我们从不将其分离到另一个控制器,这是完全可以的。对于事务问题,我认为控制器不是处理事务的好点。所以服务是更好的选择。