域驱动设计 – 我是否正确使用服务层?

域驱动设计 – 我是否正确使用服务层?,第1张

概述我一直在阅读有关DDD的信息,我认为我可能错误地使用服务,或者至少以不那么理想的方式使用服务.我的服务类往往有很多包含存储库引用的实例变量,它们似乎做了很多工作(即有很多方法). 是否可以创建更有针对性的服务?像每个服务执行某些特定逻辑的方法一样?此外,服务类应该将实例变量存储到其他实体吗?我读了一些关于无状态服务的内容,我不确定是否通过使用这些实例变量来破坏该规则. 谢谢! My service 我一直在阅读有关DDD的信息,我认为我可能错误地使用服务,或者至少以不那么理想的方式使用服务.我的服务类往往有很多包含存储库引用的实例变量,它们似乎做了很多工作(即有很多方法).

是否可以创建更有针对性的服务?像每个服务执行某些特定逻辑的方法一样?此外,服务类应该将实例变量存储到其他实体吗?我读了一些关于无状态服务的内容,我不确定是否通过使用这些实例变量来破坏该规则.

谢谢!

解决方法

My service classes tend to have quite
a few instance variables…

这不一定是代码味道.如果您的服务需要许多依赖项来完成其工作,那么这只是一个事实.

…they seem to do a lot of work (i.e
have a lot of methods).

Is it advisable to create more focused services?

作为一般规则,您可以更精细地制作服务接口(即方法越少),越好(通过一个接口搜索五十种方法,寻找你想要调用的接口?).但除非您作为公共API发布,否则可以随着时间的推移细化服务接口的粒度.通常,在启动项目时,我将从一项服务开始,并随着时间的推移将其拆分.如果您是这些服务的消费者,那么当您开始感受到界面变得越来越大的痛苦时,您就会知道是时候将其分解了.当然,如果这是一个公共API,那么你将不得不做更多的前期设计.

Also,should service classes store instance variables to other entitIEs? I read something about services being stateless,I’m not sure if I am breaking that rule by having those instance variables.

将依赖项存储为实例变量并不一定意味着您的服务不是无状态的,只要实例变量也是无状态的.要被视为无状态,对服务的方法调用决不能以任何方式依赖于之前被调用的方法.您应该能够加载单个服务实例,并为您的应用程序共享它(即无状态服务的实例不应该特定于特定用户的会话).换句话说,您的服务不应该在方法调用之间保持任何状态.将无状态存储库依赖项作为变量存储在服务实例上不会违反此要求.

无状态服务是一个理想的目标,没有状态大大降低了BUG的可能性.它通过限制测试用例来改变传入的参数,而不必担心服务的先前状态,从而简化了服务方法的测试.它还可以提供性能优势.

总结

以上是内存溢出为你收集整理的域驱动设计 – 我是否正确使用服务层?全部内容,希望文章能够帮你解决域驱动设计 – 我是否正确使用服务层?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1138178.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存