我的团队和我就Web API控制器应该包含哪些代码进行了讨论。我们都同意控制器不应该包含业务逻辑,但是我们在工作流程的放置位置以及工作流程是否完全与业务逻辑分离上存在分歧。
他们认为端点应该看起来像这样: 控制器代码:
他们认为端点应该看起来像这样: 控制器代码:
public Response EndPoint(...)
{
var flow = new SomeFlow();
var response = flow.RunFlow(...);
return response;
}
流程代码:
public class SomeFlow
{
public HttpResponseMessage Activate(....)
{
var service = new Service();
var entities = someService.GetEntities();
if(entities == null) return new HttpResponseMessage(HttpStatusCode.NotFound);
foreach(var entity in entities)
{
BusinessLogicClass/Model.DoSomething(entity)
}
.....
.....
}
}
SomeFlow.cs类位于解决方案中的业务逻辑项目下。
我向他们展示了这个stackoverflow答案: https://dev59.com/fWcs5IYBdhLWcg3woFft#12694104,但他们仍然认为这段代码更易读。
最让我不安的是,流程类都位于业务逻辑项目下,这样会鼓励开发人员将业务逻辑放入流程类中,并将BL与工作流紧密耦合。我不认为有必要创建只有一个公共方法且仅在项目中使用一次的这种类。
无论以何种方式进行测试都可以,但当BL位于流程类中时,纯BL的测试可能会稍微困难一些。
工作流是否被视为业务逻辑?
感谢回复!
HttpResponseMessage
等内容与应用程序类型(Web应用程序)耦合在一起。因此,它仍然是Web应用程序的一部分,而不是自己独立的东西。我想真正的问题是...这个逻辑需要成为自己独立的东西吗?它将被其他Web应用程序使用吗?它将被任何其他类型的应用程序使用吗?还是只是为了想要更多的移动部件而增加移动部件?这听起来都是基于观点的。关注底线...实际上获得/失去了什么? - DavidHttpResponseMessage
的东西怎么能归类为业务逻辑。如果你要创建像这样的SomeFlow
,至少将其放在 Web API 项目中,而不是业务逻辑层。 - Evk