业务逻辑是不是属于服务层?

Posted

技术标签:

【中文标题】业务逻辑是不是属于服务层?【英文标题】:Does business logic belong in the service layer?业务逻辑是否属于服务层? 【发布时间】:2010-03-17 02:18:13 【问题描述】:

我有一组类,即数据传输对象、服务实现对象和数据访问对象。我目前在服务实现对象中有业务逻辑;它使用 dao 来获取数据以填充 dto,该 dto 被运回客户端/gui 代码。

问题是我无法创建服务实现对象的轻量级 junit 测试(它是一个 servlet);我认为业务逻辑应该放在其他地方,但我唯一能想到的是将业务逻辑放在 dao 中,或者放在 dao 和服务实现之间的另一个层中。

还有其他选择吗,还是我想错了?

这是一个 GWT/App Engine 项目。

【问题讨论】:

【参考方案1】:

我不明白为什么你不能对 servlet 进行单元测试,例如根据this SO question(还有其他类似主题的人)——你能解释一下吗?

编辑:如果没有特殊原因,我建议您应该在服务层(它似乎属于)中的业务逻辑并在那里对其进行单元测试——SO 中建议的方法例如,我刚刚引用的问题似乎相当轻量级(尽管我没有专门测试它们)。

【讨论】:

好的,那么我认为您应该将业务逻辑保留在服务层并在那里对其进行单元测试——我引用的 SO 问题中建议的方法似乎足够轻量级(尽管我没有测试他们特别)。【参考方案2】:

您可以将您的业务逻辑放在它自己的 jar 文件中,并独立于与 Web 的集成(servlet)来测试这个组件

servlet 只是一个协议,它不是你的业务逻辑,更多的是一个集成点。

很容易想象通过胖客户端公开相同的业务逻辑。 同样在这种情况下,您不应将业务逻辑隐藏在按钮或链接下。

还有一点需要注意:您可能想研究 MVC 框架;支柱。您的模型将保存业务逻辑。

希望这会有所帮助。

【讨论】:

【参考方案3】:

servlet是控制器,把业务逻辑放在那里是一个很大的错误。

【讨论】:

因为它是控制器!!

以上是关于业务逻辑是不是属于服务层?的主要内容,如果未能解决你的问题,请参考以下文章

业务逻辑和服务

如果我从控制器中取出逻辑,是不是需要业务逻辑层?

控制器逻辑与服务/业务层逻辑

应用层和业务逻辑层有啥区别?

Java Spring Boot如何实现业务逻辑层和资源库层?

用于业务逻辑或数据访问层的 Web 服务