我已经在DDD读了,我想我可能会使用的服务是从一个不太理想的方式不对,或者至少。我的服务类往往有包含库引用了不少实例变量,他们似乎做了很多工作(即有很多的方法)。

时,它建议创建更有针对性的服务?像每一个服务的方法,其执行某些特定的逻辑?此外,应服务类的实例变量存储到其他实体?我读了一些关于服务无状态的,我不知道如果我被那些具有实例变量打破这一规则。

谢谢!

有帮助吗?

解决方案

  

我的服务类往往有相当   几个实例变量...

这不一定是代码的气味。如果您的服务需要许多依赖于完成工作,那么这是一个简单的事实。

  

...他们似乎做了很多工作(即   有很多的方法)。

     

时,它建议创建更有针对性的服务?

将作为一般规则,更精细,你可以让你的服务接口(即较少的方法),较好(曾经通过五十方法上寻找一个接口不得不拖网要打电话? )。但是,除非你是释放一个公共的API,你的服务接口粒度可以为你一起去细化。通常情况下,启动一个项目的时候,我会只用一个服务开始,并把它分解了一段时间。如果你是这些服务的消费者,那么当你开始感到的接口越来越大的痛苦,你就会知道是时候打破它。当然,如果这的的公共API,那么你将不得不做更多的前期设计。

  

此外,应服务类的实例变量存储到其他实体?我读了一些关于服务无状态的,我不知道如果我被那些具有实例变量打破这一规则。

存储依赖实例变量并不一定意味着你的服务不无状态的,只要实例变量也是无状态的。被认为是无状态的,在服务方法调用不得以任何方式依赖于具有被称为以前的方法。你应该能够加载的服务的一个实例,并让它为你的应用程序共享(即无状态服务的实例不应该是针对特定的用户会话)。换句话说,你的服务不应该维护方法调用之间的状态。在服务实例存储无国籍库的依赖作为一个变量并没有违反有关规定。

原因无状态服务是期望的目标,是不具有状态大大减少错误的可能性。它通过限制的测试用例不同传递的参数,而不必对服务的先前状态的担心简化了服务方法的测试。它也可以提供性能优势。

其他提示

我建议上依赖注入,控制反转等读了。

这里的Fowler的文章: http://martinfowler.com/articles/injection.html ,虽然我总觉得他是一个比最高位。我将通过表示使用DI / IoC容器的教程尝试行走。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top