在服务层中组织服务之间的交互的最佳方式是什么?例如,我有文档服务和产品服务。在我的例子中,产品可以有自己的文档,为了管理产品的文档,我从产品服务的文档服务中调用了适当的方法。因此,我需要在产品服务中创建文档服务的实例。我还需要在文档服务中调用产品服务中的一些方法。因此,这些服务中的每一个都引用了其他服务,并且我分别得到了stackoverflowexception异常。我应该使用哪些设计解决方案来消除这些问题?
发布于 2013-04-15 17:29:02
显然,中循环依赖是错误的。
您可以使用shared identifiers将Product
%s和Document
%s解耦。
此外,您可以在应用程序中从它们外部编排服务交互:在ProductService中,您可以让LoadProducts(ProductIdentifiers[] identifiers)
返回不可变的产品集合,在DocumentService中,您可以让LoadDocuments(DocumentIdentifiers[] identifiers)
返回不可变的文档集合。
发布于 2013-04-15 20:03:36
应用程序服务应该为外部客户端提供用于执行内聚业务操作的API。应用程序服务方法通常与应用程序的用例相匹配。
特别是,仅仅因为您在业务案例中的某个时刻开始操作另一种实体并不意味着您应该将该部分委托给另一个应用程序服务-换句话说,每个实体一个应用程序服务不一定是正确的。
在任何情况下,从您的域应该清楚地显示出两个应用程序服务之间的依赖关系所指向的方向。在您的示例中,Product Service似乎依赖于Document Service -很难想象为什么会是相反的情况。
如果您确实需要服务A和服务B之间的往返(除非别无选择,否则我不会这样做),您可以尝试让A的实例将自身注入到B中,而不是依赖DI容器来解决与新实例的依赖关系,从而解决堆栈溢出问题-如果这就是您首先获得堆栈溢出的原因。
https://stackoverflow.com/questions/16010800
复制相似问题