2017-09-15 33 views
2

在MVC模式中,我们正在开发一个REST应用程序。在控制层写入决策语句

服务层正在返回Optional<T>其中T可以是任何类。

RESTController层有条件语句,测试结果是否为Optional.empty然后返回[]否则返回实际数据。

return ABCService.getById("").map(send actual data).orElse(Collections.empty()); 

把这段代码写在控制层上是不好的做法?因为我们不想返回null。如果我们不在控制层使用这个条件,我们必须从服务层中删除Optional,我认为这不是一个好习惯。

有人可以请解释为什么添加上面的代码不是一个好的做法,会有什么后果?

+0

“DO DO SOMETHING”和“DO SOMETHING ELSE”是* values *,它与'map'和'orElse'的意图相符,而它们的内容暗示你实际描述了一个动作。 – Holger

+2

如果代码不是表示逻辑,那么这是不好的做法,因此应该不在控制器中。如果代码是表示逻辑,并且应该在控制器中,那么这是很好的做法。所以这一切都取决于做些什么和做些什么实际上是。 –

+0

更新了我的问题。 –

回答

1

控制器负责以他们应该提供的格式表示数据。他们不处理原始数据(像通常由服务处理的读取/更新操作),他们只是告诉这些数据应该如何。

因此,认为.map(send actual data)没有做任何与业务逻辑层相关的任何事情,您的代码片段是可以接受的。

剩下的另一个问题是如何正确编写处理该案例的方法。根据“清洁代码”,我建议写两种方法(分别为空和非空数据)。

+1

有帮助吗?如果还有问题,你可以自由询问:) – Andrew

+0

是的,有很多问题.. https://softwareengineering.stackexchange.com/questions/357565/writing-decision-statement-on-control-layer我问过这个问题这里的问题..N人说话,我正在努力返回**可选 ** ..是真的吗? 有什么我可以做我的API根据标准? –