gpt4 book ai didi

java - 从另一个服务类调用服务方法

转载 作者:行者123 更新时间:2023-11-29 04:08:40 25 4
gpt4 key购买 nike

我有两个服务类。 WarehouseManagementService 提供管理仓库和库存的方法。 SalesManagementService 提供管理客户及其订单的方法。

要创建订单,必须检查订单商品数量是否足够。为此,我将使用 WarehouseManagementService 中的方法 availableStock(Product p)。但我不知道如何正确调用此方法。

我是否必须在 SalesManagementService 中创建一个 WarehouseManagementService 实例?或者我应该将 WarehouseManagementServiceInterface 添加到 SalesManagementService 构造函数(依赖注入(inject))?

为了实现这两个类的松散耦合,一个好的架构应该是什么样的?

提前致谢。

public class WarehouseManagementService implements WarehouseManagementServiceInterface {

private DatabaseReadWarehouseInterface dbRead;
private DatabaseWriteWarehouseInterface dbWrite;

public int availableStock(Product p) {
// returns available quantity of product
}

}
public class SalesManagementService implements SalesManagementServiceInterface {

private DatabaseReadSalesInterface dbRead;
private DatabaseWriteSalesInterface dbWrite;

public void addOrder(Order o) {
// creates order, if product quantity is sufficient
}

}

最佳答案

您有正确的感觉:应该注入(inject)依赖项。请记住 Single Responsibility Principle :“一个类应该只有一个改变的理由”。

通过在 SalesManagementService 中构造 WarehouseManagementService,您可以添加第二个改变 SalesManagementService 的原因:当构造您的 的方式时WarehouseManagementService 更改。

要解决它,您可以使用成熟的依赖注入(inject)框架,或者简单地从向 SalesManagementService 添加构造函数参数开始:

public class SalesManagementService implements SalesManagementServiceInterface {

private DatabaseReadSalesInterface dbRead;
private DatabaseWriteSalesInterface dbWrite;
private WarehouseManagementServiceInterface warehouseManagementService;

constructor(DatabaseReadSalesInterface dbRead,
DatabaseWriteSalesInterface dbWrite,
WarehouseManagementServiceInterface warehouseManagementService) {
this.dbRead = dbRead;
this.dbWrite = dbWrite;
this.warehouseManagementService = warehouseManagementService;
}

public void addOrder(Order o) {
// creates order, if product quantity is sufficient
}

}

然后在您的 main 方法中,注意实例化 WarehouseManagementService 并将其传递给 SalesManagementService

作为旁注,您可能希望将 SalesManagementServiceWarehouseManagementService 的构造移动到为您提供 SalesManagementServiceInterface 的工厂中>WarehouseManagementServiceInterface 而不是具体类(“程序接口(interface),而不是实现”)。

关于java - 从另一个服务类调用服务方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56556782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com